none
如何在类中使用Session RRS feed

  • 问题

  • 我在页面中使用ajax方法进行方法调用,在另一个类中处理这个请求。我需要在这个类中使用Session。直接使用HttpContext.Current.Session是不行的。应为这时候这个值为null。我该这么做才能使用Session呢?


    郭鹏
    2009年12月1日 5:53

答案

  • ,我通过Session["username"] 获得的值变成null了

    这样做是可以的,但不是读取 Session["username"],你只能获取Session.SessionID来删除数据库。
    保存的时候,需要将 Session.SessionID保存进去的,作为删除的依据 。

    Session_End事件里只能得到  Session.SessionID

    【孟子E章】
    • 已标记为答案 Hugo12345 2009年12月2日 5:49
    2009年12月1日 8:50
    版主

全部回复

  • System.Web.HttpContext.Current.Session["xx"]
    只能这样写,

    或者

    public xxx(HttpSession s)
    做为参数传递 
    2009年12月1日 6:14
    版主
  • 直接使用HttpContext.Current.Session是不行的。应为这时候这个值为null

    是你使用的问题,你要理解Session的含义。
    你要保证每次请求的sessionID是相同的才能正常工作,

    【孟子E章】
    2009年12月1日 6:18
    版主
  • 同一次会话的会话的ID应该是不会变的吧。我在类中调用System.Web.HttpContext.Current.Session.Abandon(); 任然是未将对象应用到实例?


    郭鹏
    2009年12月1日 6:29
  • 同一次会话的会话的ID应该是不会变的吧

    具体是不是你将这个值记录下来就知道 了

    【孟子E章】
    2009年12月1日 6:46
    版主
  • 通过测试,我发现。在网站中不添加Global的时候,只要没有通过Session["..."]进行赋值,SessionId一只在变化。进行赋值后,就一直不变了,就算调用了Session.Abandon()也不会改变。然后我在网站中添加了Global,SessionId不管有没有进行赋值,都是不变的。然后我还有一个问题请教,在网站中添加了Global后,我调用Session.Abandon()后。执行Session_End事件,然后每次请求都要执行一次这个事件,这时SessionId任然没有改变的。能不能通过某种方法获取当前Session是否过期。这个方法应该是全局的。比如,我得知当前Session已经过期,将客户定义到另一个页面。重新设置一次Session
    郭鹏
    2009年12月1日 7:43
  • 通过测试,我发现。在网站中不添加Global的时候,只要没有通过Session["..."]进行赋值,SessionId一只在变化。进行赋值后,就一直不变了,就算调用了Session.Abandon()也不会改变。然后我在网站中添加了Global,SessionId不管有没有进行赋值,都是不变的。然后我还有一个问题请教,在网站中添加了Global后,我调用Session.Abandon()后。执行Session_End事件,然后每次请求都要执行一次这个事件,这时SessionId任然没有改变的。能不能通过某种方法获取当前Session是否过期。这个方法应该是全局的。比如,我得知当前Session已经过期,将客户定义到另一个页面。重新设置一次Session
    郭鹏

    推长设置时间  或者重新赋值!
    2009年12月1日 8:12
  • asp.net 2.0就是这样的。

    asp.net 1.1不会变 

    我得知当前Session已经过期,将客户定义到另一个页面。重新设置一次Session

    只能
    if(Session["x"] == null)
    来进行执行转向,不能放在 Session_End事件 里。因为 Session_End事件 是服务器端的事件,客无法通知客户端端的

    【孟子E章】
    2009年12月1日 8:17
    版主
  • 判断用户是否重复登录有什么号办法吗?我这2天都在想这个问题。好烦的。到现在还没找到一个比较好的办法。主要是有一种情况我不找到该这么注销登录:当用户是因为Session超时而注销(直接关闭浏览器一段时间后)。如果我在数据库维护一个字段来处理用户是否重复登录,则我需要在Session超时的时候调用一个存储过程,修改数据库中该字段。我需要在用户登录后保存该用户的用户名,但是如果Session超时,我通过Session["username"] 获得的值变成null了.....
    郭鹏
    2009年12月1日 8:37
  • ,我通过Session["username"] 获得的值变成null了

    这样做是可以的,但不是读取 Session["username"],你只能获取Session.SessionID来删除数据库。
    保存的时候,需要将 Session.SessionID保存进去的,作为删除的依据 。

    Session_End事件里只能得到  Session.SessionID

    【孟子E章】
    • 已标记为答案 Hugo12345 2009年12月2日 5:49
    2009年12月1日 8:50
    版主