繁体   English   中英

如何获取带有 SessionId 的 Session?

[英]How Can Get Session With SessionId?

我使用 ASP.NET MVC。 我有个问题。 我将变量设置为 session 并请求不属于我的 web 服务。 然后 web 服务向我的服务器发出HttpPost请求。 它不会向我的服务器发送 cookie,所以我丢失了 session。

我想我可以将我的sessionid保存到数据库中,我可以用这个 ID 取回我的 session。 但我无法得到任何解决方案。

你有什么建议?

public ActionResult SomeAction(){
    mySettingService.saveSessionIdToDb(someToken, Session.SessionID);

    var myPaymentFormObj = FormInit.Create(request, options);
    myPaymentFormObj.DoRequest(); //it's callback to my another action with a token
}


[HttpPost]
public ActionView MyCallBack(string someToken){
    //here is our app generates new session id and i lost my session because other server doesn't send me session id.
    //i need to read session id from db and i can get my session maybe.

    var mySessionId = mySettingService.getSessionIdFromDb(someToken);

    //how can i start session like this?
    Session.SessionID = mySessionId;
}

您描述的问题似乎与维护分布式事务有关。 为了更好地描述它,您的应用程序是服务 A,而 webServer 是服务 B。您可以执行一个操作,将一些更改保存到数据库 A,包括 session 内容,然后您向服务 B 发送调用,这也可以保存对其的一些更改数据库或执行一系列其他操作,但在这种情况下,您并不关心它是如何工作的,您只关心通过回调得到什么样的响应。 应该有一个选项可以发送某种独特的东西,例如userEmailtransactionId ,您可以在回调方法中取回它们以识别交易。

我建议你做的是

[HttpPost]
public ActionResult SendBlah(BlahData data){
    var transactionId = Guid.NetGuid();
    _sessionService.Create(transactionId, dataYouWantToStore)
    _webServiceB.SendBlah(transactionId, data, token);
    //optionally return info about call status / do other stuff
}

//or this can be of type HttpGet
[HttpPost]
public ActionView MyCallBack(string someToken, string tranactionId){
    var sessionData = _sessionService.Get(tranactionId) 
    //do other stuff
}

如果需要并且您正在使用例如JWT ,您可以存储transactionId/emailAddress/etc. 而是在那里阅读。 顺便提一句。 it's always safer to store the session in the database instead of using some cache objects or relaying on cookies or javascript objects etc. Also, it's better to be careful with the amount of data you want to store in a Session table in your db. 我个人会专注于存储 ID 和给定项目的状态等内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM