绝世游戏txt下载,吉它普,3d宝马赛
需求场景
解决方案
services.adddistributedrediscache(options => //使用redis { options.configuration = $"{conf},defaultdatabase={dbid}"; }); services.addsession(options => { options.idletimeout = timespan.fromminutes(30); options.cookie.domain = "site.com"; });
自定义sessionmiddleware
由于asp.net 自带的sessionmiddleware中间中对sessionid做了加密处理,导致不同应用虽然sessionid相同,但是并不能成功的共享session,具体详件sessionmiddleware源码,其中使用了cookieprotection类的对sessionid进行了加密
public async task invoke(httpcontext context) { .... if (string.isnullorwhitespace(sessionkey) || sessionkey.length != sessionkeylength) { // no valid cookie, new session. var guidbytes = new byte[16]; cryptorandom.getbytes(guidbytes); sessionkey = new guid(guidbytes).tostring(); cookievalue = cookieprotection.protect(_dataprotector, sessionkey); var establisher = new sessionestablisher(context, cookievalue, _options); tryestablishsession = establisher.tryestablishsession; isnewsessionkey = true; } ... }
由于sessionmiddleware是直接依赖类cookieprotection,因此需要重新实现自己的中间件来处理session,比如实现一个mysessionmiddleware,即可实现session共享
public async task invoke(httpcontext context) { .... if (string.isnullorwhitespace(sessionkey) || sessionkey.length != sessionkeylength) { // no valid cookie, new session. var guidbytes = new byte[16]; cryptorandom.getbytes(guidbytes); sessionkey = new guid(guidbytes).tostring(); cookievalue = md5(sessionkey);//此处可以使用自己的加密规则,重要的是保证不同的应用,通过加密规则生成的值是相同的 var establisher = new sessionestablisher(context, cookievalue, _options); tryestablishsession = establisher.tryestablishsession; isnewsessionkey = true; } ... }
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Blazor server side 自家的一些开源的, 实用型项目的进度之 CEF客户端
.NET IoC模式依赖反转(DIP)、控制反转(Ioc)、依赖注入(DI)
vue+.netcore可支持业务代码扩展的开发框架 VOL.Vue 2.0版本发布
网友评论