ASP.NET MVC会话丢失与Identity自动登出问题求助
问题分析与解决方案
首先,这两个问题本质上是域名不一致导致Cookie/Session无法共享,再加上Plesk的域名配置放大了这个问题,咱们一步步拆解:
核心原因:跨域名Cookie不共享
ASP.NET的Session Cookie和Identity认证Cookie都是和当前域名绑定的。如果用户访问的域名(比如www.jooyabash.ir)和银行回调的域名(比如jooyabash.ir)不一致,浏览器会认为是两个不同的站点,不会携带对应的Cookie,就会出现:
- 回调时
Session["orderid"]为null - Identity认证Cookie无法被识别,用户看似“自动登出”
Plesk域名设置的影响
你观察到的现象完全符合这个逻辑:
- 设置为"None":网站同时接受
www和不带www的请求,用户可能用其中一个访问,银行回调用了另一个,域名不统一导致Cookie丢失。 - 设置为"www.jooyabash.ir":Plesk会把不带
www的请求重定向到带www的,但如果银行回调用的是不带www的URL,就会出现域名不匹配,Cookie无法传递。 - 设置为"jooyabash.ir":所有
www的请求都会被重定向到不带www的,确保用户访问和银行回调的域名完全一致,Cookie能正常携带,所以10分钟内会话正常(超过10分钟可能是应用池回收的问题,后面说)。
具体解决方案
1. 强制统一域名(优先推荐)
在Plesk里固定Preferred domain为jooyabash.ir,确保所有请求最终都跳转到这个域名。同时,把银行回调的URL也改成jooyabash.ir/Result,彻底避免域名不一致的问题。
2. 配置Cookie跨子域名共享(备选方案)
如果必须同时支持www和不带www的域名,需要显式设置Cookie的Domain属性,让两个域名共享Cookie:
针对Session Cookie(修改web.config)
<system.web> <!-- 让Session Cookie支持所有子域名 --> <sessionState timeout="30" cookieDomain=".jooyabash.ir"></sessionState> <!-- 全局Cookie配置 --> <httpCookies domain=".jooyabash.ir" /> <authentication mode="Forms"> <forms loginUrl="~/User/Login" timeout="30" domain=".jooyabash.ir"> </forms> </authentication> </system.web>
针对Identity认证Cookie(修改Startup.cs)
在UseCookieAuthentication中添加CookieDomain配置:
app.UseCookieAuthentication(new CookieAuthenticationOptions() { AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, LoginPath = new Microsoft.Owin.PathString("/User/Login"), ExpireTimeSpan = TimeSpan.FromDays(15), CookieDomain = ".jooyabash.ir", // 新增这一行,支持跨子域名 Provider = new CookieAuthenticationProvider { OnApplyRedirect = ctx => { if (!IsForApi(ctx.Request)) { ctx.Response.Redirect(ctx.RedirectUri); } } } });
3. 解决10分钟后会话失效的问题
当设置为jooyabash.ir时10分钟内正常,超过时间失效,大概率是Plesk应用池自动回收导致的(默认应用池回收时间可能是20分钟以内)。你可以:
- 登录Plesk,找到对应网站的应用池,调整回收时间(比如设置为120分钟)
- 或者禁用应用池的定期回收(不推荐,除非你有其他监控机制)
- 如果Session重要性很高,可以考虑改用
StateServer或SQLServer模式存储Session(避免应用池回收丢失Session)
额外注意点
- 确保银行回调的请求是POST请求(如果是GET,可能会有缓存问题,但主要还是域名)
- 检查浏览器是否禁用了Cookie,不过你设置为
jooyabash.ir时正常,所以这个可以排除
内容的提问来源于stack exchange,提问作者mohsen
相关产品推荐
相关产品推荐

