2011-12-22 54 views
1

我使用:如何在HttpContext中正确设置会话?

if (string.IsNullOrEmpty(myHttpContext.Request.QueryString["code"])) 
    { 

     if (myHttpContext.Session == null || myHttpContext.Session["code"] == null) 
     { 
      OutputError("Code", "Invalid code."); 
     } 
     else 
     { 
      code = myHttpContext.Session["code"].ToString(); 
     } 
    } 
    else 
    { 
     code = myHttpContext.Request.QueryString["code"]; 
     myHttpContext.Session.Add("code", code); 
    } 

不过,我不断收到错误:未设置为一个对象的实例 对象引用。

For: myHttpContext.Session.Add(“code”,code);

我想要做的就是设置一个简单的会话,有人请帮助这个让我疯狂。

回答

4

是否实施了IHttpHandler(ashx)类IRequireSessionState?否则会话对象将不可访问。

public class MyHandler : IHttpHandler, IRequireSessionState 
{ 
    public bool IsReusable { get { return false; } } 

    public void ProcessRequest(HttpContext ctx) 
    { 
     // your code here 
    } 
} 
+0

年后,这是第一篇文章,我发现给了这个解决方案。它需要更多upvotes。 :)在我的情况下,我使用的接口是'System.Web.SessionState.IReadOnlySessionState'。 – Andrew 2014-12-05 14:19:29

0

你忘if (myHttpContext != null)

然而,你可能想使用始终存在的上下文来代替:HttpContext.Current

// if querystring parameter has a value 
if (!string.IsNullOrEmpty(HttpContext.Current.Request.QueryString["code"])) 
    // then use its value 

相同的会话(如果它的存在 - 见@davisleeps回答说) https://stackoverflow.com/a/8598088/179972

+0

我只有CurrentHandler和CurrentNotification。 – Darren 2011-12-22 00:25:50

+0

这工作正常。我不敢相信我不能用这个简单的会话,我将不得不使用cookies。 – Darren 2011-12-22 00:27:38

+0

这些不在你的原始问题中,但如果你不确定,请检查它们是否为null。如果您认为问题与问题相关,则可以更新您的问题以提供更多信息和更多代码。 – 2011-12-22 00:29:15

0

我相信你可能想尝试

myHttpContext.Session["code"] = code;