关于对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的失效期等来实现记住登陆???还有一个就是一个大型网站,多个不同的域实现一次登陆的问题。这个查过一些资料,但是思路还是不大明确,望详解。暂时就这些问题吧,多谢!

解决方案 »

  1.   

    回答一个:把sessionid 附加在url后面的话,那么如果这个连接被google等收录,别人打开这个连接,不就用你的身份登陆了那个网站了吗?这个问题是怎么解决的?
    ------------------------------
    如果这个连接被google等收录,别人打开这个连接用的是google的身份而不是你的。
      

  2.   

    .net sessionid 好像用楼主的方法不灵你不行自己实验一下;
    用 C# 模拟一下就知道了;
      

  3.   

    Cookie 这个对性能没有影响,
      

  4.   

    第一个: SESSIONID确实保存在REQUEST中,自己可以输出来看
    第二个:有SESSIONID不会执行..start
    你都可以自己做实验来看的