Session变量仍然是两个不同的控制器之间的空(Session variable still re

2019-09-01 03:15发布

我有一个问题,我的MVC项目! 我们的目标是建立一个会话变种,以便将它传递给所有控制器:我xUserController内,

            Session["UserId"] = 52;
            Session.Timeout = 30;

            string SessionUserId = ((Session != null) && (Session["UserId"] != null)) ? Session["UserId"].ToString() : ""; 

// SessionUserId = “52”

但ChatMessageController内

[HttpPost]
public ActionResult AddMessageToConference(int? id,ChatMessageModels _model){

        var response = new NzilameetingResponse();
        string SessionUserId = ((Session != null) && (Session["UserId"] != null)) ? Session["UserId"].ToString() : "";
//...

        }
        return Json(response, "text/json", JsonRequestBehavior.AllowGet);
}

SessionUserId = “”

那么,为什么这样? 如何设置会话变量是我的所有控制器内的全球?

Answer 1:

只能有两个这样的行为的原因:第一个是你的会话已经结束,第二个是你在应用程序的另一个地方,你重写会话变量。 Wthout任何额外的代码没有什么可多说。



Answer 2:

这里是我是如何解决这个问题

我知道这是不是做的最好的方式,但它帮助我:

首先,我已经创建了一个基本控制器如下

public class BaseController : Controller
{
    private static HttpSessionStateBase _mysession;
    internal protected static HttpSessionStateBase MySession {
        get { return _mysession; }
        set { _mysession = value; } 
    }
}

然后,我改变了我的其他所有控制器的代码,让他们从基本的控制器类继承。

然后我重写为下面的“OnActionExecuting”的方法:

public class xUserController : BaseController
{
    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        BaseController.MySession = Session;
        base.OnActionExecuting(filterContext);
    }
    [HttpPost]
    public ActionResult LogIn(FormCollection form)
    {
        //---KillFormerSession();
        var response = new NzilameetingResponse();
        Session["UserId"] = /*entity.Id_User*/_model.Id_User;
        return Json(response, "text/json", JsonRequestBehavior.AllowGet);
    }
}

最后,我已经改变了我呼叫会话变量的方法。

string SessionUserId = ((BaseController.MySession != null) && (BaseController.MySession["UserId"] != null)) ? BaseController.MySession["UserId"].ToString() : "";

代替

 string SessionUserId = ((Session != null) && (Session["UserId"] != null)) ? Session["UserId"].ToString() : "";

现在它的工作原理和我的会话增值经销商可以在所有控制器行走。



文章来源: Session variable still remains null between two different controllers