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来保存用户验证信息。问题解决!