关于对asp.net中的会话问题。我想问一下高手理论加实践方面的一些疑惑!
我们知道到iis(或者其他web服务器)会自动建立一个sessionid的cookie(或者附加到url后面)来跟踪会话,也就是说,这个sessionid必须保留在客户端,因为浏览器需要向服务器证明自己的身份,但是如果采用的是“把sessionid”附加在url后面的话,那么如果这个连接被google等收录,别人打开这个连接,不就用你的身份登陆了那个网站了吗?这个问题是怎么解决的?
即便是采用了cookie来保存seesionid,那么别人通过嗅探你的sessionid,并把这个sessionid复制到自己的浏览器里,不就能用你的帐号访问网站了吗?(这个问题以前在csdn看到一篇文章说一个外国黑客就是这样登陆别人的hotmail和gmail的,还公布了自己复制session的小工具)一个useragent连接后,iis会查询这个seesionid,如果有就恢复原来的会话,如果没有就新建一个会话,这里我想问一个问题,如果没有查询到这个sessionid,应该就会触发session_OnStart事件,但是如果查询到了这个sessionid,还会不会调用session_OnStart方法?因为我们通常我们会在session_OnStart里进行一些session的其他变量的设计,我个人认为这个情况下不应该触发session_OnStart方法,因为只需要恢复会话即可,触发session_OnStart只能是白做,而且性能降低!还有一个就是记住登陆问题,我没有实际做过,但是网上提供的方法是,在客户端设置一个cookie,通过检测是否存在这个cookie来判断是哪个用户。程序检测到有这个cookie后,就会根据这个cookie来设置如用户名等session变量。我的问题是,这样会不会造成性能损失? 因为有些变量有可能是存放在了sqlserver服务器里了,也就是说,iis本来已经根据sessionid恢复了会话,但是你的程序又根据那个专门的cookie覆盖了会话的某些session(覆盖的这些和没有覆盖以前的值实际上是相同的)。这样虽然达到了目的,但是感觉性能上又损失。这样又牵扯到另外一个疑问,在程序中能不能自定义iis默认设置的sessionid这个cookie的失效期等来实现记住登陆???还有一个就是一个大型网站,多个不同的域实现一次登陆的问题。这个查过一些资料,但是思路还是不大明确,望详解。暂时就这些问题吧,多谢!
我们知道到iis(或者其他web服务器)会自动建立一个sessionid的cookie(或者附加到url后面)来跟踪会话,也就是说,这个sessionid必须保留在客户端,因为浏览器需要向服务器证明自己的身份,但是如果采用的是“把sessionid”附加在url后面的话,那么如果这个连接被google等收录,别人打开这个连接,不就用你的身份登陆了那个网站了吗?这个问题是怎么解决的?
即便是采用了cookie来保存seesionid,那么别人通过嗅探你的sessionid,并把这个sessionid复制到自己的浏览器里,不就能用你的帐号访问网站了吗?(这个问题以前在csdn看到一篇文章说一个外国黑客就是这样登陆别人的hotmail和gmail的,还公布了自己复制session的小工具)一个useragent连接后,iis会查询这个seesionid,如果有就恢复原来的会话,如果没有就新建一个会话,这里我想问一个问题,如果没有查询到这个sessionid,应该就会触发session_OnStart事件,但是如果查询到了这个sessionid,还会不会调用session_OnStart方法?因为我们通常我们会在session_OnStart里进行一些session的其他变量的设计,我个人认为这个情况下不应该触发session_OnStart方法,因为只需要恢复会话即可,触发session_OnStart只能是白做,而且性能降低!还有一个就是记住登陆问题,我没有实际做过,但是网上提供的方法是,在客户端设置一个cookie,通过检测是否存在这个cookie来判断是哪个用户。程序检测到有这个cookie后,就会根据这个cookie来设置如用户名等session变量。我的问题是,这样会不会造成性能损失? 因为有些变量有可能是存放在了sqlserver服务器里了,也就是说,iis本来已经根据sessionid恢复了会话,但是你的程序又根据那个专门的cookie覆盖了会话的某些session(覆盖的这些和没有覆盖以前的值实际上是相同的)。这样虽然达到了目的,但是感觉性能上又损失。这样又牵扯到另外一个疑问,在程序中能不能自定义iis默认设置的sessionid这个cookie的失效期等来实现记住登陆???还有一个就是一个大型网站,多个不同的域实现一次登陆的问题。这个查过一些资料,但是思路还是不大明确,望详解。暂时就这些问题吧,多谢!
解决方案 »
- 在.net中引用office.dll时为什么是这个Microsoft.Office.Core而不是Microsoft.Office.Interop.Excel.dll ????
- 关于数据库连接的问题
- 两个问题
- 用window.open打开新的页面,Session丢失.尝试sessionState=InProc,SQLServer,StateServer均无法解决问题
- datalist 中的textbox取值 和分页的问题
- datagrid问题!为什么用了<Columns>就不能排序!谢谢
- 帮帮忙!一点办法也没了!
- 在.net中,dll文件如何读取配置文件。
- 求教:从子页面向母版页(MasterPage)的UpdatePanel中添加PostbackTrigger
- 为什么我的asp.net的网页在.NET开发环境中修改代码后,刷新浏览器不起作用,只有重新对这个网页进行“重新生成并浏览“才生效
- 关于验证控件的问题
- (asp.net)求一缓存机制,用户实时传入数据,后台一边定时读取缓存保存到数据库中并删除已读取的数据
------------------------------
如果这个连接被google等收录,别人打开这个连接用的是google的身份而不是你的。
用 C# 模拟一下就知道了;
第二个:有SESSIONID不会执行..start
你都可以自己做实验来看的