index.aspx和ajaxserver.aspx处在同一应用中
index.aspx登录时赋值Session["CRM_ID"]
在index.aspx用xmlHttpRequest对象直接发送请求到ajaxserver.aspx,没有用ajax.dll。
服务器端ajaxserver.aspx.cs的Page_Load中代码如下:
if(Session["CRM_ID"] != nul)
{
    Response.Write(Session["CRM_ID"].ToString());
}
else
{
     Response.Write("-1");
}为什么首页登录之后,ajax获取的ResponseText是-1。当我手动在浏览器中访问一下ajaxserver.aspx之后再用ajax访问就能获取Session["CRM_ID"]的值了?
急~~~

解决方案 »

  1.   

    在调试的时候session存活时间不固定了,有时很短.浏览器中访问一般都是20分钟
      

  2.   

    浏览器中看也是一个效果。
    就是用ajax获取的session总是比页面晚,总是需要刷新相关页面,这在session结束的时候没法实现阿
      

  3.   

    你的index.aspx是什么时间发送的请求,发送请求时是否已经对Session进行了赋值?
    如果你在登录按钮的后台赋值,而在客户端的click中请求ajaxserver.aspx,则Session还没有赋值就请求了,会出现你说的情况。
      

  4.   

    过程是这样的
    index.aspx上有登录按钮,点登录按钮,在后台为session赋值。
    客户端是index.aspx的body的onload中请求的ajaxserver.aspx
    刚刚登录之后,如果我手动访问ajaxserver.aspx就能正常显示session,但是ajax访问就不能。
    手动访问ajaxserver.aspx之后,ajax就能了
      

  5.   

    设置ajaxserver.aspx页面的过期时间
      

  6.   

    To  Soloboy1020:
    请问过期时间怎么设置?不知道这个东东
      

  7.   

    onload时就请求ajaxserver.aspx了,那时还没有点登录按钮,当然没有Session。关键是你的ajax访问的时间,是否在后台代码执行之后。这么简单的参数,用Request不是更简单。
      

  8.   

    第一次是没有获得session,在登录之后,页面刷新,这次的onload也没有获得session。哪怕是我用一个按钮,调用的那个访问,依然是首次不能正确显示,需要手动访问下页面,才能正确显示
      

  9.   

    Suntears() ( ) 信誉:100    Blog  2007-01-29 18:08:00  得分: 0  
     
       第一次是没有获得session,在登录之后,页面刷新,这次的onload也没有获得session。哪怕是我用一个按钮,调用的那个访问,依然是首次不能正确显示,需要手动访问下页面,才能正确显示
      
    ------------------------------------------------------------------------------你还是没有说明白问题所在。那两次在onload中没有获得Session是正常的,因为还没有执行登录按钮的后台代码。关键是你调用那个访问后,如何自动请求的那个Session。 肯定还是代码的问题,你认为是在执行后台代码之后,但未必就是在执行代码之后。关键是点击了那个按钮后,你的请求代码是在哪里写的。
      

  10.   

    TO  Ivy_zheng:
    我说的不够清晰么?
    顺序是请求index.aspx页面——页面加载(运行了body的onload,未取出session)——点击登录按钮,后台给session赋值——客户端出现登录后的页面——页面加载(运行了body的onload,同样未取出session)
      

  11.   

    我说的不够清晰么?
    顺序是请求index........
    ———————————————————————————————————————————
    你这个叙述中连“对象直接发送请求到ajaxserver.aspx”都没有体现,能算清楚吗?
      

  12.   

    是比较奇怪,我的都可以啊。这样试一下,登录页面上增加一个Label,等写入Session后,执行:
    LabelName.Text = @"<Script Language='JavaScript'>调用load中那个函数</Script>";
      

  13.   

    帖子主要内容那里已经体现,难道你看贴直接看回复,不看主要内容的?
    ————————————————————————————————————————
    “在index.aspx用xmlHttpRequest对象直接发送请求到ajaxserver.aspx”这个可以回答Ivy_zheng(最后一只恐龙)的问题吗?如果这个可以回答,那么Ivy_zheng(最后一只恐龙)后边问你的问题真的是算是多余的了。
      

  14.   

    sp1234,他也漏东西我也漏,纠缠不清了。Suntears,你还是仔细看一下代码的执行顺序,应该是执行顺序上出了问题。
      

  15.   

    请仔细分析 session 实现的原理:
    session是这样实现的,你在服务器给他负值了,然后再在客户段操作页面,这样session就发送sessionId给本地cookie(或通过get方式传递),你在访问别的页面时本地cookie就发送这个存储在他里面的sessionId给服务器,服务器匹配查找后知道你的session已经有了值,这样就实现了session的跨页面访问。现在首先你在index.aspx付值后,在服务器上session有了值,但当你在ajaxserver.aspx中用xmlhttp访问时,发出请求的时候本地cookie中还未存储服务器上的seessionId,这样服务器就认为你还没有给session负值,所以你得不到预想的结果。解决方案:用一个隐藏的框架iframe访问index.aspx一下,或者其他页面也行,这样再用xmlhttp访问你就可以得到你预想的结果了。
      

  16.   

    呵呵,SessionID在客户端第一次请求服务器的时候就被创建,同时在第一次从服务器获得页面数据的时候即被存储到本地cookie,否则第二次请求页面的时候,服务器如何知道这是谁请求的?
      

  17.   

    这个问题的原因是,在vs.net调试的环境下,这种问题经常出现,而且现象总是变化,不稳定,偶尔重启机器之后这种现象暂时消失。放到真实的服务器环境下运行就ok了