- 积分
- 40165
- 好友
- 记录
- 主题
- 帖子
- 听众
- 收听
|
asp.net4.0检查浏览器Cookie状态之Bug,网站登录之后自动退出解决方案
问题是这样的,在有些浏览器和,有些用户的电脑上,输入用户名和密码登录之后是正常的,但是只要一操作页面就自动退出。
但是大部分用户是正常的,这个问题让我郁闷了很久。
经过测试发现是Net的Form验证的Bug
在有些环境下在检查浏览器是否支持Cookie是为检查错误,就是本来浏览器支持Cookie检查成了不支持。
我做了个测试如下
添加一个测试页面
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("测试是否支持Cookie:" + Request.Browser.Cookies);
}
只有一个输出语句。
检查浏览器是否支持Cookie。
在我的电脑上测试如下
说明是支持Cookie的,
但是放到服务器上让用户访问就成了如下
我靠。这问题很犀利啊,
而且用户电脑上所有的浏览器都是这样的。
一时间无法下手了。
这个问题是在.net4.0之后出现的,以前没有出现过
因为今天把服务器上的2.0修改成了4.0
而且经过我的测试ASP.NET 3.5及ASP.NET 2.0
是为True,只有4.0为False
这下有了方向也就好解决了,
看看Form验证的配置吧
[code=html] <authentication mode="Forms">
<forms name=".sufienet" protection="All" timeout="240" defaultUrl="~/Index.aspx" loginUrl="~/Login.aspx"/>
</authentication>[/code]
经过我排查原来是cookieless属性的问题
这个属性有如下值
[code=html] <xs:attribute name="cookieless" use="optional">
<xs:simpleType>
<xs:restriction base="xs:NMTOKEN">
<xs:enumeration value="AutoDetect" />
<xs:enumeration value="UseCookies" />
<xs:enumeration value="UseDeviceProfile" />
<xs:enumeration value="UseUri" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>[/code]
默认的是UseDeviceProfile
也就是说从文件检查
其实很简单,直接修改成第三项UseCookies就行了。
如下所示
[code=html] <authentication mode="Forms">
<forms name=".sufienet" protection="All" cookieless=“UseCookies” timeout="240" defaultUrl="~/Index.aspx" loginUrl="~/Login.aspx"/>
</authentication>[/code]
问题解决了。
或许大家也可能出现这样的情况那么安我上面的思路基本上可以解决。
大家给提提建议啊
|
|