日期:2014-05-20  浏览次数:20738 次

Form验证中不走Login页面的Page_Load, 各位帮忙啊
我的Form验证想第一次从http://...../Login.aspx后,记住Cookie,跳转到Default.aspx页,下一次在地址栏直接输入进入http://...../Login.aspx页面后,因为Cookie已经存在,所以不用通过登录,直接跳到Default.aspx页.

现在的问题是第一次登录后,我觉得已经记住Cookie了,但是再输入Login页面地址,应该是先走Login页的Page_Load,取出Cookie,然后通过Cookie的纪录直接跳转页面,可现在却连Page_Load都不走了,就更别说取Cookie了

各位集思广益,刚我解决一下

Web.config   设置:

        <authentication   mode= "Forms ">
<forms   name= "MISCookie "   loginUrl= "Login.aspx "   timeout= "60 "   protection= "All "   path=   "/ "   > </forms>
        </authentication>


       


------解决方案--------------------
ref:http://www.lemongtree.com/zh-cn/0000203.aspx
...
如果验证用户有效,则生成同此用户对应的身份验证票,写到客户端的Cookie,最后将浏览器重定向到用户初试请求的页面.一般是用FormsAuthentication.RedirectFromLoginPage 方法来完成生成身份验证票,写回客户端,浏览器重定向等一系列的动作.

public static void RedirectFromLoginPage( string userName, bool createPersistentCookie, string strCookiePath );

其中:
userName: 就是此用户的标示,用来标志此用户的唯一标示,不一定要映射到用户账户名称.
createPersistentCookie: 标示是否发出持久的 Cookie。
若不是持久Cookie,Cookie的有效期Expiration属性有当前时间加上web.config中timeout的时间,每次请求页面时,在验证身份过程中,会判断是否过了有效期的一半,要是的话更新一次cookie的有效期;若是持久cookie,Expiration属性无意义,这时身份验证票的有效期有cookie的Expires决定,RedirectFromLoginPage方法给Expires属性设定的是50年有效期。
strCookiePath: 标示将生成的Cookie的写到客户端的路径,身份验证票中保存这个路径是在刷新身份验证票Cookie时使用(这也是生成Cookie的Path),若没有strCookiePath 参数,则使用web.config中 path属性的设置。

这里可以看到,此方法参数只有三个,而身份验证票的属性有七个,不足的四个参数是这么来的:
IssueDate: Cookie发出时间由当前时间得出,
Expiration:过期时间由当前时间和下面要说的 <forms> 标签中timeout参数算出。此参数对非持久性cookie有意义。
UserData: 这个属性可以用应用程序写入一些用户定义的数据,此方法没有用到这个属性,只是简单的将此属性置为空字符串,请注意此属性,在后面我们将要使用到这个属性。
Version: 版本号由系统自动提供.

RedirectFromLoginPage方法生成生成身份验证票后,会调用FormsAuthentication.Encrypt 方法,将身份验证票加密为字符串,这个字符串将会是以.ASPXAUTH为名字的一个Cookie的值。这个Cookie的其它属性的生成:Domain,Path属性为确省值,Expires视createPersistentCookie参数而定,若是持久cookie,Expires设为50年以后过期;若是非持久cookie,Expires属性不设置。
生成身份验证Cookie后,将此Cookie加入到Response.Cookies中,等待发送到客户端。
最后RedirectFromLoginPage方法调用FormsAuthentication.GetRedirectUrl 方法获取到用户原先请求的页面,重定向到这个页面。
...
------解决方案--------------------
====================
现在的问题是第一次登录后,我觉得已经记住Cookie了,但是再输入Login页面地址,应该是先走Login页的Page_Load,取出Cookie,然后通过Cookie的纪录直接跳转页面,可现在却连Page_Load都不走了,就更别说取Cookie了


====================

你觉得已经记住Cookie了,那你输出下,看有没有保存Cookie,只有知道有没有才能去判别,可能根本就没有保存Cookie
------解决方案--------------------
你写出cookie的 有效期 是多久?
myCookie.Expires = ?
表明的话cookie再你关闭 页面后即消失了
下次当然就没有了
------解决方案--------------------
刚写了一段代码,没有问题啊:
System.Web.Security.FormsAuthentication.RedirectFromLoginPage( "test ",true);

楼主跟踪一下看,或者把代码贴出来
------解决方案--------------------
mark 一下
------解决方案--------------------
Page_Load()是走得,并且所有代码都能执行。

我的程序用到Form登陆界面的Page_Load()

你可以详细检查一下你的程序。