其他系统访问.Net Core网站页面 跳转时SessionId会发生变化

changuncle
领域专家: 后端开发技术领域
2019-10-09 12:20:42
1、http://10.90.19.109:701/iframeapprove.html?eip_title=普通申请&url=http://localhost:63888/home?taburl=DomainGroup/DomainGroup_Apply/Audit?id=2e0094d4-3ef7-438a-bca0-52c0c5012cd6&urltype=index,在http://10.90.19.109:701网站中通过上述地址来跨域访问Core网站http://localhost:63888/home/Index页面
2、访问Home控制器中的Action时,需要先在CheckSessionFilter中检查是否登录,若用户未登录但是是通过其他系统单点登录访问本系统的页面就将请求地址保存到Session中key=currentUrl,然后跳转到/Login/Index
3、在/Login/Index页面读取Session中key=currentUrl的值,但是/Login/Index页面的Session和http://localhost:63867/home/Index页面的Session不是同一个对象,导致无法获取Session中key=currentUrl的值

请问为什么Core网站中页面跳转时SessionId会发生变化呢?麻烦各位大佬给看看。
...全文
7313 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
理论上说,每当前端获取后台 html 页面,实际上都相当于是在后台重启一个应用程序。一定要把每一个“页面”看作一个独立的应用程序,这样才能看清楚 asp.net mvc 的模式是多么累赘和低效率,意识到需要考虑多少冗余问题才能保证丰富的页面状态!所以最近8、9年,专业的 html/js 应用是纯粹前端的独立应用程序,跟服务器端只是进行纯粹数据服务交互,而不是靠服务器端来一遍遍地刷新产生新的 html 页面的。

当你从另外一个应用,重定向回原来的网页应用时,你能意识到“这是再次重启原来那个网站应用”,这个时候设计上才会比较顺利。
  • 打赏
  • 举报
回复
另外,每一种技术都有其适合和不适合的地方。其中最不应该做的事情就是用原本是纯粹 UI 的东西来保存后台数据。UI就是为了展示用的,并且更容易随着过时、被淘汰而早早被淘汰。同时 UI 部分也会应用户的千变万化的需求改变而改变。所以不要想当然地把数据放到 UI 组件,然后又在别的地方从 UI 组件来“获取”数据。UI 组件要依赖底层数据,而不是把
UI 控件当作保存底层数据的东西。

你使用 Action 之类的“一遍遍刷新重建 html 页面”的 asp.net mvc 机制来当作一个纯粹数据服务,这就好像把大象当作蚂蚁来看待,是个很不好的做法。
  • 打赏
  • 举报
回复
传统的(基本的)asp.net 机制,在页面第一次被生成和客户端访问时,假设程序像 Session 集合写入和会话状态数据,那么这个时候才会产生固定的 SessionID,并且将此SessionID 放到 cookie 中传出。这样下一次“刷新”问题时就有了 SessionID 传来。

如果你不符合这个机制,那么自然,貌似“刷新”访问而实际上 Session 是不存在的。
weixin_43864439 2020-05-27
  • 打赏
  • 举报
回复
引用 4 楼 小大飞 的回复:
你的session是进程内session,跨域后是另一个进程。所以生成的sessionid肯定是一样的。 这种跨站认证,session不能使用进程内session,要么使用独立的认证中心,要么使用redis、memached、内存数据库等性能较好的缓存容器实现独立的session功能。 跨站点认证,也可以不用session技术,可以改用token,在登录系统认证后,生成token,携带token跳转到第三方网站,第三方网站直接解密token,检查token信息是否有效,判断用户的登录状态。
正解棒棒哒
小大飞 2019-11-07
  • 打赏
  • 举报
回复
你的session是进程内session,跨域后是另一个进程。所以生成的sessionid肯定不是一样的
上面写错了。
小大飞 2019-11-07
  • 打赏
  • 举报
回复
你的session是进程内session,跨域后是另一个进程。所以生成的sessionid肯定是一样的。
这种跨站认证,session不能使用进程内session,要么使用独立的认证中心,要么使用redis、memached、内存数据库等性能较好的缓存容器实现独立的session功能。

跨站点认证,也可以不用session技术,可以改用token,在登录系统认证后,生成token,携带token跳转到第三方网站,第三方网站直接解密token,检查token信息是否有效,判断用户的登录状态。
正怒月神 2019-11-01
  • 打赏
  • 举报
回复
你都说跨域访问访问了啊。。。 你要携带自己的cookie。不然服务器找不到sessionID
haiancdp0503 2019-11-01
  • 打赏
  • 举报
回复
以前的经验:跨域请求时 浏览器 post 不会发送cookie,只是在浏览器端可以共享cookie
changuncle 2019-10-09
  • 打赏
  • 举报
回复
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => false;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
这种情况只在被其他系统跨域访问的时候才出现,本系统正常登陆时存储、读取Session是没问题的
已经博主授权,源码转载自 https://pan.quark.cn/s/008193215f29 在处理英文PDF文献进行阅读和翻译的过程中,常常碰到一个挑战:文档内的换行标记可能干扰翻译的精确度。 这一现象的产生源于谷歌翻译等在线翻译服务在解析含换行符的内容,常将其错误地解读为语句的终止点,进而引发翻译结果的偏差。 为了应对这一难题,我们可以运用若干实用策略来改善翻译流程。 下面介绍一种行之有效的方法:首先,需要将英文PDF文献中的文字信息进行复制。 这一操作可以通过两种途径实现:1. 利用PDF转WORD软件:众多第三方应用程序例如Adobe Acrobat或在线转换平台,能够协助我们将PDF资料转化为Word文档,从而获取无换行符的纯文本格式。 2. 直接从PDF文档提取:倘若PDF文件具备编辑属性,用户可以选取文本并执行复制动作,尽管这种方式有保留换行符,但后续可进行相应处理。 随后,建议采用WPS Office(国产办公应用)进行深入编辑。 WPS具备卓越的文本处理能力,可协助我们清除换行标记并优化段落布局。 具体操作步骤如下:1. 下载并安装WPS Office。 若个人电脑尚未安装该软件,可从其官方网站获取并完成安装流程。 2. 启动WPS的文字编辑模块。 在WPS中创建一个新文档,并将从PDF复制的文本粘贴至其中。 3. 在WPS的界面顶部,定位“开始”功能键,并点击进入。 4. 在“开始”功能区下,查找“文字工具”选项。 此功能集合提供了多种实用工具,有助于解决各类文本难题。 5. 在“文字工具”内,识别“删除空格”功能。 此步骤旨在移除文本中的所有空白字符,包括由换行产生的额外空格。 6. 继续选择“段落重排”功能。 该操作将依据实际语境自动调整文本的分句方式,确保每个句子的完整...

13,345

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET技术前瞻
社区管理员
  • .NET技术前瞻社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧