安全退出,清空Session或Cookie
2018-06-22 07:41:18来源:未知 阅读 ()
概览:
网站中点击退出,如果仅仅是重定向到登录/出页面,此时在浏览器地址栏中输入登录后的某个页面地址如主页,你会发现不用登录就能访问。这种所谓的退出并不是安全的。
那么怎样做到安全退出呢?
那就是点击退出后清空相应的Session或Cookie。
清空Session的代码:
Session.Clear();
Session.Abandon();
清除Cookie的正确代码(假设Cookie名称为UserInfo):
1 if (Request.Cookies["UserInfo"] != null) 2 { 3 Response.Cookies["UserInfo"].Expires = DateTime.Now.AddDays(-1); 4 }
如果需要清除所有Cookie,则遍历:
1 for (int i = 0; i <Response.Cookies.Count; i++) 2 { 3 Response.Cookies[i].Expires = DateTime.Now.AddDays(-1); 4 }
清除Cookie的错误代码(假设Cookie名称为UserInfo):
1 if (Request.Cookies["UserInfo"] != null) 2 { 3 Response.Cookies.Remove("UserInfo"); 4 }
你会发现,这样处理后,Cookie依然存在,为什么就是删不掉呢?我们去看看.NET的HttpCookieCollection实现源码:
1 public void Remove(string name) 2 { 3 if (this._response != null) 4 { 5 this._response.BeforeCookieCollectionChange(); 6 } 7 this.RemoveCookie(name); 8 if (this._response != null) 9 { 10 this._response.OnCookieCollectionChange(); 11 } 12 }
这个操作在HttpCookieCollection这个集合里面删除了cookie,当服务器将数据传输到客户端的时候,不会包含这个已经在服务端删除了的Cookie的任何信息,浏览器也就不会对它做任何改变(remove方法只是不让服务器向客户机发送那个被删除的cookie,与此cookie留不留在客户机里无关)。所以cookie删除不掉的情况就出现。
既然Response.Cookies.Remove没有办法实现我们需要的效果,为什么微软还有留着呢,因为CookieCollection实现ICollection接口,romove是必须实现的方法,尽管它没多大的实际价值。而集合的romove也应该是这样的实现方式,只不过微软在写MSDN的时候,描述得太不清楚了,给我们造成了不小的麻烦。
下面就总结下实现安全退出的几种方式:
1).用Linkbutton,Button等服务器控件实现退出
这种方式最好处理:直接在服务器控件对应的事件里编写清空Session或Cookie的代码即可。
2).用<a>注销</a>等HTML标记实现退出
对于<a></a>这个特殊标记,可以这样实现: <a href="logout.aspx">注销</a> ,在logout.aspx的Page_Load事件中编写清空Session或Cookie的代码即可。
对于<a></a>等HTML标记,可以在HTML标记的相应client事件中用Js-Ajax,或者jQuery-Ajax,在一般处理程序(.ashx)中编写清空Session或Cookie的代码即可。
对于<a></a>等HTML标记,还可以这样:在当前页面添加一个服务器控件如Button,用div包含,并让其隐藏(注意:隐藏不可见,不能通过服务器属性Visible=False,只能通过设置div的display:none;来实现),在Button的服务器事件Cilck里编写清空Session或Cookie的代码;然后在HTML标记的相应client事件中用Js或者jQuery调用Button控件的Click事件即可(通过服务器属性Visible=False设置Button隐藏,Js或者jQuery调用Button控件的Click事件将失效)。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 在ASP.NET中创建安全的web站点 2019-06-16
- 【转载】 Asp.Net安全之防止脚本入 2019-05-18
- 【转载】腾讯云服务器通过设置安全组放行对外端口号 2019-05-13
- ASP.NET list<object> OBJECT.clean()会清空s 2019-05-08
- 从NetCore报错到MySql安全 2019-02-17
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash