我有一个应用程序,在使用该应用程序的过程中,用户可能会点击
virginia.usa.com
到
newyork.usa.com
由于我不想每次用户从一个子域跨到另一个子域时都创建一个新会话,因此跨多个子域共享会话信息的一种好方法是什么?
- 2021-1-111 #
- 2021-1-112 #
跟踪您自己的会话并使用具有适当域设置的cookie,即
.usa.com
或者,如果您使用的是PHP,我认为可以更改其使用的会话Cookie的默认域设置,这可能也很有用。
您要查找的设置是:
session.use_cookies = 1 session.use_only_cookies = 1 session.cookie_domain = .usa.com
- 2021-1-113 #
我最近经历了这一点,并学会了艰难的方法.实际上,Localhost被视为TLD. Cookie域至少需要一个二级域-test.com.如果您希望Cookie适用于某个域及其所有子域,请在前缀前面加上"。". -.test.com。
在本地运行/调试时,设置本地主机的域将失败,并且即使正确设置了该域也将失败,因为默认情况下Visual Studio使用本地主机。
可以在项目属性中更改此默认localhost,以便该项目实际在cookie域test.com上运行.本质上,如果浏览器中的地址匹配,您就可以使用它。
这里记录了我的问题:在web.Config中设置ServiceStack Cookie域会导致会话ID随每个请求更改
希望这会有所帮助。
- 2021-1-114 #
如果您使用的是PHP,则一种技巧是制作一些(或两个)include脚本来执行以下操作:
1序列化$ _SESSION数组 2将字符串作为隐藏输入传递,并使用POST以单独的形式将所有链接链接到这些按钮。 3还包括一个布尔隐藏输入,让您的脚本知道它是否需要使用当前会话或反序列化$ _POST ['session'] 4在您的网站上进行部署,并在适当的地方调用
如果实际上存在一种批准的转移会话的方式,我不会这样做.我希望您至少考虑过使用cookie。
- 2021-1-115 #
如果您有多个子域指向同一个IIS应用程序,那么Matt的答案肯定是正确的方法(这正是我现在遇到的情况,使用 通配符DNS,然后在接收端进行子域"嗅探"。
但是,我想添加一些我经历过的东西,以防有人发现这对他们不起作用.单独设置httpCookies行对我来说并不行,我不得不在我的web.config文件中添加一个machineKey条目:
machineKey解密密钥=" 12 ... D1" validationKey =" D7..8B"
特别奇怪,因为我不是web场设置中的不是(除非AwS / EC2有效地发挥了作用)。一旦这样做,它就像冠军一样。
相关问题
- c#:如何保护webconfig中存储的密码?c#asp.netasp.netmvciiswebconfig2021-01-11 20:29
- iis:如何使AppDomain中的ASPNET程序集保持活动状态?asp.netiisassembliesappdomainapplicationpool2021-01-09 15:26
- c#:在Visual Studio 2013中更改项目端口号c#asp.netiisvisualstudio20132021-01-08 11:57
- Azure中的ASPNET会话状态提供程序asp.netsessionazureasp.netsessionazurewebroles2021-01-07 21:25
- iis:如何以零停机时间部署ASPNET应用程序asp.netiisdeploymentredundancy2021-01-07 06:27
您用ASP对此进行了标记. NET和IIS,因此我假设这是您的环境.确保您的web.config中有此文件:
如果您的2个子域映射到同一应用程序,那么您就完成了.但是,如果它们是不同的应用程序,则您需要做一些额外的工作,例如使用基于SQL Server的会话存储(并修改存储过程以确保所有应用程序共享相同的会话数据)或使用HttpModule来拦截应用程序名称. ,因为即使使用共享的Cookie和相同的机器密钥,两个应用程序仍将使用2个不同的存储区作为其会话数据。