当前位置:编程学习 > C#/ASP.NET >>

重定向问题

系统是用extjs做的,经常会使用ajax调用一般处理程序 现在webconfig配置有httpmudole写了一个类,如果session丢失的话转到登陆界面 现在是一般页面或者按钮操作都是可以的 但是用ajax调用的,mudole的类也Context.Response.Redirect会执行,但不会转地址,求解 --------------------编程问答-------------------- 描述的不是很清楚,代码可以贴一下。 --------------------编程问答-------------------- ajax调用过程中如果是session丢失,则必须从mudole的类返回session丢失的标志,ajax再根据服务端返回的标志在客户端重设浏览器的url地址到登录页面。要区分好ajax请求和本身浏览器的请求,ajax只能看成是整个页面的一部分而已。ajax请求在服务端的处理都不会影响到包含该ajax的整个页面。要影响本页面必须通过ajax得到响应后编写相应的javascript来操作页面或浏览器。 --------------------编程问答-------------------- 开始登录时设置一个状态值,IsLogon=true,如果session已经超时,那么一访问时IsLogon自动变成False

那么在母版面里有个登录每个页的登录口,在
protected override void OnInit(EventArgs e)
{
}
里面,超时后重定向应该在这里处理

        protected override void OnInit(EventArgs e)
        {
            if (!HttpContextUtility.IsLogon())
            {
                FormsAuthentication.SignOut();
                Response.Redirect("~/Login.aspx");
            }
            else
            {
                 Response.Redirect("实际需要访问的页URL");
            }

            base.OnInit(e);
        }
--------------------编程问答--------------------
引用 2 楼 u012503570 的回复:
ajax调用过程中如果是session丢失,则必须从mudole的类返回session丢失的标志,ajax再根据服务端返回的标志在客户端重设浏览器的url地址到登录页面。要区分好ajax请求和本身浏览器的请求,ajax只能看成是整个页面的一部分而已。ajax请求在服务端的处理都不会影响到包含该ajax的整个页面。要影响本页面必须通过ajax得到响应后编写相应的javascript来操作页面或浏览器。

我明白你的意思 但是整个项目很多都是通过ajax方式 我不可能每个页面去修改代码在返回值里重定向,你有什么好的思路没有 --------------------编程问答--------------------
引用 4 楼 u010403392 的回复:
Quote: 引用 2 楼 u012503570 的回复:

ajax调用过程中如果是session丢失,则必须从mudole的类返回session丢失的标志,ajax再根据服务端返回的标志在客户端重设浏览器的url地址到登录页面。要区分好ajax请求和本身浏览器的请求,ajax只能看成是整个页面的一部分而已。ajax请求在服务端的处理都不会影响到包含该ajax的整个页面。要影响本页面必须通过ajax得到响应后编写相应的javascript来操作页面或浏览器。

我明白你的意思 但是整个项目很多都是通过ajax方式 我不可能每个页面去修改代码在返回值里重定向,你有什么好的思路没有

可以重构一下发送ajax和得到响应的javascript,写一个函数放一个js文件里面,函数可以包含要发送的url地址和传输的数据,还有一个对响应数据进行处理的回调函数指针,这样的一些参数,函数体里面对响应数据进行判断,是否是session丢失,如果是则跳到登录页面,如果session不丢失的话则调用传到该函数的回调函数对数据进行处理。有用到ajax的页面则统一引入该js文件,并在需要的时候调用该函数。也可以做个母板页,在母板页里面引入js,其他页面创建为内容页,这样就可以简化操作。 --------------------编程问答-------------------- Session需要巨大的代价。asp.net需要将所有的Session集合中搜索出当前会话相关的Session单元,然后拷贝给你的 HttpHandler 对象。等它处理完了,还要再靠背回去。即使你的 HttpHandler 根本不用Session 集合也是如此。

因此默认地,你就不应该在Ajax的后台处理中使用Session集合。任何一种想当然地给它(即使你根本不用)传Session集合的机制都应该抛弃。也就是说,如果你的“现在webconfig配置有httpmudole写了一个类”不能修改从而避免为Ajax后台服务传Session集合的话,那么就扔掉这个类吧! --------------------编程问答-------------------- 看到说“Session丢失”我们就会偷偷发笑。

你应该从一开始设计asp.net程序时就“不用Session集合”。或者,从一开始就知道如何使用“asp.net state server”服务,并且保证你放到Session集合中的对象都可以序列化。
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,