去除asp.net 2.0的会话cookie ASP.NET_SessionId 的httponly属性
2015-07-03 13:17
751 查看
http://www.7es.cn/Software_development/remove-aspx-sessionid-httponly.shtml
标题写的很难看,说起来这个问题比较不容易发现。
最近用采集程序在线发布内容到我的一个小站,站用的我用asp.net写的cms后台程序,原来貌似可以正常的实现自动登录自动在线发布,单前端出了问题,一直登录不正常,多方查找原因都不知道为什么。后来偶然机会,想到是不是asp.net的sessionid没有被采集程序正常捕获到,造成登录会话丢失,无法发布。
asp.net页面被访问时,就会给访问者生成一个session,这个会话会一直保留到该访问者离开,甚至可以更久。而访问者则需要每次访问页面时带上这个session的一个id,即写到客户端cookie中的ASP.NET_SessionId,当然这个是默认情况下,通过配置也可以通过url传递sessionid等,此处不论。
从.net 2.0之后,ASP.NET_SessionId 这个cookie被加上了httponly属性,话说httponly,就是让某个cookie值无法通过客户端脚本获取,避免一些安全性的问题,比如跨站攻击等。当然,既然该cookie传递到了客户端,通过一些手段还是能读取到,只是常见的软件,默认是不允许访问该值的,比如ie6 sp1之后版本的浏览器。通过一些http通讯监控程序也能轻松的捕获这个值。
测试表明,正是因为ASP.NET_SessionId这个cookie被赋予了httponly属性,致使采集工具软件没法正确的记录session,从而发布文章到cms时被告知没有登录。因为会话丢失了。
那么,如果去除ASP.NET_SessionId的httponly属性,应该可以解决问题,ASP.NET_SessionId在访问者访问第一个页面文件时,就会产生,那么是否可以再会话产生时修改该值呢。
查找文档得知,可以再应用全局程序文件中,关闭ASP.NET_SessionId的httponly,具体是给asp.net程序添加全局应用程序类文件Global.asax,编辑该文件代码,在会话生成事件函数Session_Start中加入如下代码
protected void Session_Start(object sender, EventArgs e)
{
Response.Cookies["ASP.NET_SessionId"].HttpOnly = false;
}
这样无论你的访问者先打开那个页面访问你的站点,都会关闭cookie ASP.NET_SessionId的httponly属性了,当然如果你只想在某个文件被访问时处理特殊的会话效果,也可以在某个页面文件的代码中进行同样处理。
关闭httponly之后,那个采集器程序可以正常获取会话id并正常发布了。
不好的就是,这样也会造成一些不必要的安全问题哦。
标题写的很难看,说起来这个问题比较不容易发现。
最近用采集程序在线发布内容到我的一个小站,站用的我用asp.net写的cms后台程序,原来貌似可以正常的实现自动登录自动在线发布,单前端出了问题,一直登录不正常,多方查找原因都不知道为什么。后来偶然机会,想到是不是asp.net的sessionid没有被采集程序正常捕获到,造成登录会话丢失,无法发布。
asp.net页面被访问时,就会给访问者生成一个session,这个会话会一直保留到该访问者离开,甚至可以更久。而访问者则需要每次访问页面时带上这个session的一个id,即写到客户端cookie中的ASP.NET_SessionId,当然这个是默认情况下,通过配置也可以通过url传递sessionid等,此处不论。
从.net 2.0之后,ASP.NET_SessionId 这个cookie被加上了httponly属性,话说httponly,就是让某个cookie值无法通过客户端脚本获取,避免一些安全性的问题,比如跨站攻击等。当然,既然该cookie传递到了客户端,通过一些手段还是能读取到,只是常见的软件,默认是不允许访问该值的,比如ie6 sp1之后版本的浏览器。通过一些http通讯监控程序也能轻松的捕获这个值。
测试表明,正是因为ASP.NET_SessionId这个cookie被赋予了httponly属性,致使采集工具软件没法正确的记录session,从而发布文章到cms时被告知没有登录。因为会话丢失了。
那么,如果去除ASP.NET_SessionId的httponly属性,应该可以解决问题,ASP.NET_SessionId在访问者访问第一个页面文件时,就会产生,那么是否可以再会话产生时修改该值呢。
查找文档得知,可以再应用全局程序文件中,关闭ASP.NET_SessionId的httponly,具体是给asp.net程序添加全局应用程序类文件Global.asax,编辑该文件代码,在会话生成事件函数Session_Start中加入如下代码
protected void Session_Start(object sender, EventArgs e)
{
Response.Cookies["ASP.NET_SessionId"].HttpOnly = false;
}
这样无论你的访问者先打开那个页面访问你的站点,都会关闭cookie ASP.NET_SessionId的httponly属性了,当然如果你只想在某个文件被访问时处理特殊的会话效果,也可以在某个页面文件的代码中进行同样处理。
关闭httponly之后,那个采集器程序可以正常获取会话id并正常发布了。
不好的就是,这样也会造成一些不必要的安全问题哦。
相关文章推荐
- 常用Web开发语言HttpOnly设置详解
- C#中HttpClient使用注意:预热与长连接
- 监听网络状态
- 查看网络图片
- receiver 修改可以用http访问
- iOS开发网络篇之Web Service和XML数据解析
- Android项目开发全程(三)-- 项目的前期搭建、网络请求封装是怎样实现的
- <%@page contentType="text/html;charset=gbk"%>与<meta http-equiv="Content-Type" content="text/html; ch
- php://input 和$_POST和$GLOBALS['HTTP_RAW_POST_DATA']的简单区别
- 连接监听器:接受TCP连接 (十一) (转)
- TCP传输数据初探
- 聊聊HTTPS与Android安全(二)
- HttpMessageConverter(消息转换器 )和@responsebody使用
- SpringMVC DELETE,PUT请求报错 添加支持Http的DELETE、PUT请求
- iOS开发网络篇之Base64编解码
- 关于Bayes网络新解
- Ubuntu 14.04 下搭建SVN服务器 (转载自 http://www.linuxidc.com/Linux/2015-01/111956.htm)-------------我所用到是红色字体
- 查看网络图片
- Android循环滚动广告条的完美实现,封装方便,平滑过渡,从网络加载图片,点击广告进入对应网址
- CocoaAsyncSocket网络通信使用之数据编码和解码(二)