2011-12-22 53 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;