xiong님의 프로필共享空间标题사진블로그리스트 도구 도움말
    12월 22일

    如何检查ASP.NET中的session lost

     
    1, 最简单的情况就是所有用户的所有session都丢了。这种情况一般发生在In-Proc的session mode上。原因就是appdomain挂了。看appdomain有没有recycle, 跟或asp.net process有没有crash. 直接看perfmon就可以了
    2, 稍微麻烦一点的就是一个用户的session丢了,不是所有用户的session丢。首先是要在session start里面做log. 把每一个session id的创建时间都记录到log里面。这样问题发生的时候session丢了session id总还在吧,比较log看看这个session 是不是刚刚建立的。如果是,很有可能是客户端的原因导致session id丢了,其实就是cookie丢了。如果不是,那我们继续在session start里面记录一个我们自定义session value, 看看这个测试用的session value是不是丢。如果这个也丢,9成是用户调了Session.Clear.
    3. 如果我们这个session value没有丢,情况就变成一个用户的session里面的一部分value丢了。这9成还是由于用户的代码导致的。唯一的解决的方法+最有效的方法只有加log. 加log的技巧是:
    1) 在session start里面把这个session创建时间记录到session里面
    2) 在代码中对session操作的地方,写log到以sessionid为文件名的文件里面去
    3) log记录对什么session做操作,当前是什么页面什么函数,存在的session是些什么东西,操作的时间
    4) 当检查到session丢失的时候,在event log中记录下session id和丢失的key
    这样,问题发生的时候,根据event log里面的session id找到log文件,一下子就可以看出来了。
    最后,根据解决过的各种奇怪session 丢失的经验,所有的session丢失奇怪问题都是客户端导致的。所以特别检查:
    1. 如果用户开两个ie访问一个url, 其实是两个session的。也就说,session的maintain是依靠session id cookie,而这个cookie完全是由client控制的。开发人员设计的时候根本没有考虑到开两个ie访问的情况,用户在一个ie里面去写session, 在另外一个ie里面去读,当然不成功
    2. 用户依靠client script来维护web page的执行持续。client script是不可靠的,所以...
    3. 最容易忽视的情况就是这个session其实timeout掉了。可以在session end里面加log看到
    最后,思路就是:
    1. 看sessionid是否变化。变了,就是客户端或者防火墙问题,只跟设定有关系,跟代码没关系
    2. 没变,就是代码问题,注意看是不小心清掉了呢,还是开发人员根本没有考虑有客户端的各种行为
     
    路过的人添砖加瓦阿

    댓글 (8개)

    잠시만 기다려 주세요...
    죄송합니다. 입력한 댓글이 너무 깁니다. 내용을 줄여 보세요.
    입력한 내용이 없습니다. 다시 시도해 보세요.
    죄송합니다. 지금은 댓글을 추가할 수 없습니다. 나중에 다시 시도해 보세요.
    댓글을 추가하려면 부모님의 사용 허락이 필요합니다. 허용 요청
    부모님이 댓글 기능을 해제한 상태입니다.
    죄송합니다. 지금은 댓글을 삭제할 수 없습니다. 나중에 다시 시도해 보세요.
    하루에 남길 수 있는 댓글의 최대 한도를 초과했습니다. 24시간 후에 다시 시도해 보세요.
    회원님의 계정은 다른 사용자에게 스팸 메일을 보낼 수 있다고 여겨지므로 댓글 기능이 비활성화되어 있습니다. 이 설정에 문제가 있다고 생각되면 Windows Live 지원에 문의하시기 바랍니다.
    댓글을 남기려면 아래 보안 검사를 완료해야 합니다.
    보안 검사에 입력한 글자는 그림 또는 오디오에 있는 글자와 일치해야 합니다.

    댓글을 추가하려면 Windows Live ID로 로그인하세요. 핫메일, 메신저 또는 Xbox LIVE를 사용하는 경우 해당 계정을 Windows Live ID로 사용할 수 있습니다.로그인


    Windows Live ID가 없으신가요? 등록

    9월 1일
    1월 17일
    黄宇님이 남긴 글:
    这个问题是我和熊兄认识的CASE, 绝对杀手级问题
    4월 18일
    알 수 없음님의 사진
    putaoefu 님이 남긴 글:
    杀毒软件属于"原因就是appdomain挂了"
    记log是写本地文件,比respond.write快多了,跟html page比较,log只相当于每次多发送了一幅100*100 pixel的图片

    perf的测量可以用perfmon一下子看到
    1월 4일
    알 수 없음님의 사진
    方_枪枪 님이 남긴 글:
    杀毒软件如果对assembly扫描,也会造成dll restart,这个算不?
    记log,会不会对perf有影响?哦,没办法,呵呵。

    老大,如果SessionState设置为StateServer(另一台机器,不是本机)或者SqlServer,perf上,会有多大损失?(20%?还是可以忽略不计?)
    1월 3일
    알 수 없음님의 사진
    CL 님이 남긴 글:
    人品问题
    12월 23일
    알 수 없음님의 사진
    WangTingFelix 님이 남긴 글:
    打开cookie的IIS log才是王道
    12월 22일
    알 수 없음님의 사진
    WangTingFelix 님이 남긴 글:
    打开cookie的IIS
    12월 22일

    트랙백

    이 블로그의 트랙백 URL은 다음과 같습니다.
    http://eparg.spaces.live.com/blog/cns!59BFC22C0E7E1A76!447.trak
    이 블로그를 참조하는 웹 로그
    • 없음