您当前的位置:KKBlog > 学无止境 > ASP.NET

forms身份认证在ie11下无法保存cookie的问题

asp.net中使用forms身份认证常见的做法如下: 

1. 网站根目录下的web.config添加authentication节点 

代码如下:

<authentication mode=forms> 
<forms name=myauth loginurl=manager/login.aspx defaulturl=manager/default.aspx protection=all timeout=60 /> 
</authentication>

2. 在manager子目录下添加web.config文件并加入下面的内容: 

代码如下:

<?xml version=1.0?> 
<configuration> 
<system.web> 
<authorization> 
<allow roles=admin /> 
<deny users=* /> 
</authorization> 
</system.web> 
</configuration>

这样,用户在没有forms认证的情况下访问manager子目录下的任何页面均会自动跳转到manager/login.aspx页面。如果认证成功,则会默认回到manager/default.aspx页面。认证有效期为60分钟。 

代码在visual studio中运行一切正常!但是将网站发布到服务器的iis (可能会是较低版本的iis,如iis 6)后,发现登录功能异常。输入用户名和密码后点击登录按钮,页面postback但并不能正确跳转,尝试手动访问受保护的页面会被自动跳转回登录页面。更奇怪的是该问题只出现在ie11浏览器上,尝试用firefox或chrome访问登录功能运行正常。初步怀疑是iis设置的问题,可是iis 6上并没有与cookie相关的设置,好像记得iis 7上倒是有这个设置。但因为只有ie 11存在该问题,所以可以否定代码本身存在任何问题。 

此外,还尝试了降低ie 11的安全级别,重新安装服务器上的.net framework以及下载最新的补丁等等,均不能解决问题。后来发现其实只需要简单修改web.config中authentication节点的设置就可以了,给forms添加cookieless=usecookies属性即可。 

代码如下:

<authentication mode=forms> 
<forms name=myauth cookieless=usecookies loginurl=manager/login.aspx defaulturl=manager/default.aspx protection=all timeout=60 /> 
</authentication>

用以明确告诉服务器使用cookie来保存用户验证信息。问题解决!

二维码
意见反馈 二维码