c# - 如何使用 SessionId 获取会话?
问题描述
我使用 ASP.NET MVC。我有个问题。我将变量设置为会话,并请求不属于我的 Web 服务。然后 Web 服务HttpPost
向我的服务器发出请求。它不会向我的服务器发送 cookie,所以我失去了会话。
我想我可以将我的数据保存sessionid
到数据库中,然后我可以用这个 ID 恢复我的会话。但我无法得到任何解决方案。
你有什么建议?
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,包括会话内容,然后您向服务 B 发送调用,这也可以保存对其的一些更改数据库或执行一系列其他操作,但在这种情况下,您并不关心它是如何工作的,您只关心通过回调得到什么样的响应。应该有一个选项可以发送某种独特的东西,比如你可以在回调方法中取回userEmail
的东西transactionId
,以便能够识别交易。
我建议你做的是
[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.
那里并阅读它。顺便提一句。将会话存储在数据库中总是更安全,而不是使用一些缓存对象或中继 cookie 或 javascript 对象等。此外,最好小心要存储在数据库中的会话表中的数据量。我个人会专注于存储 ID 和给定项目的状态等内容。
推荐阅读
- python - 握手失败;返回 -1,SSL 错误代码 1,net_error -201
- spring-boot - 在不使用 xml 配置的情况下创建委托 LdapAuthenticationProvider,而不是通过 java 代码
- apache-spark - Pyspark 向每一行添加新记录
- sql - 其中 Column1 = case @var = 0 然后为 null
- javascript - 我收到 index.ts:36 Uncaught (in promise) 错误:元素未附加到文档
- javascript - 将变量从 script.js 导出到 App.svelte
- google-api - 无法使用 JSON 进行身份验证 | 谷歌 API
- node.js - 无法将 GCP 机密管理器与 GCP 云功能(nodeJS)一起使用
- javascript - 如何在 onChange 上提交反应表单字段,而不是使用 React-Hook-Form 库提交
- php - 我需要使用 pdf 导出选项报告 Laravel 包