多站点Session共享解决方案

简介: 对于大多数的网站来说,都会使用Session来维护用户在一次会话中操作;Session对于任何Web项目来说都是必不可少的(当然除去那里网站里不包含任何用户操作的,^_^这个对于Web2.0时代的网站来说好像是不太可能的吧)。

对于大多数的网站来说,都会使用Session来维护用户在一次会话中操作;Session对于任何Web项目来说都是必不可少的(当然除去那里网站里不包含任何用户操作的,^_^这个对于Web2.0时代的网站来说好像是不太可能的吧)。对于单独的站点来说,一个站点只用一个Session就OK了,但对于同时多个站点来说,如何对多个站点时实现Session共享呢?

  常见的作法有:

  • 使用Cookie方式实现多个站点间的共享(这种方式只限于几个站点都在同一域名的情况下);
  • 使用.net自动的状态服务(Asp.net State Service);
  • 使用.net的Session数据库;
  • 使用MemcachedDB。

  以上几种方案各有优点,至于每种方式的优点在那里,缺点在那里?一时半会真的很难说清,如果有一篇文章就能说清的,那都是扯蛋,这种东西没有在实际中使用,单单在表现上说这个方案好那个方案不好,都是扯蛋。

  我们的项目现在采用的是第三种方案,使用Session数据库解决多站点的Session共享。有不同看法的朋友都可以聊一下,下面说一下我们的实现方式:

  1. 既然使用Session数据库了,当然必须要先对数据库进行创建,既然是使用微软的方案了,微软肯定也就为大家提供了相应的实现方式。通过命令行方式进入:
    1 C:\Windows\Microsoft.NET\Framework64\v4.0.30319
    在此目录下运行:
    1 aspnet_regsql.exe -sstype c -ssadd -d 你的数据库名 -U 用户名 -P 密码 -S 数据库服务地址
    注意:此处的参数是区分大小写的;执行完上述命令后,会进行Session数据库创建阶段,创建完成后可以打开数据库查看创建是否成功。
  2. Session数据库创建成功了并不代表就可以实现多项目的Session共享了,还需要对目前的Session数据库做一些小小的手脚,其实就是为了欺骗数据库说“哎,我就一个应用程序在运行。^_^”。下面来看看怎么做这点小手段:
ALTERPROCEDURE[dbo].[TempGetAppID]
@appName tAppName,
@appIdint OUTPUT
AS
SET@appName=LOWER(@appName)
SET@appId=NULL

SELECTtop1@appId= AppId
FROM[SNSSessionDB].dbo.ASPStateTempApplications
--WHERE AppName = @appName

IF@appIdISNULLBEGIN
BEGINTRAN

SELECT@appId= AppId
FROM[SNSSessionDB].dbo.ASPStateTempApplications WITH (TABLOCKX)
WHERE AppName =@appName

IF@appIdISNULL
BEGIN
EXEC GetHashCode @appName, @appId OUTPUT

INSERT[SNSSessionDB].dbo.ASPStateTempApplications
VALUES
(@appId, @appName)

IF@@ERROR=2627
BEGIN
DECLARE@dupApp tAppName

SELECT@dupApp=RTRIM(AppName)
FROM[SNSSessionDB].dbo.ASPStateTempApplications
WHERE AppId =@appId

RAISERROR('SQL session state fatal error: hash-code collision between applications ''%s'' and ''%s''. Please rename the 1st application to resolve the problem.',
18, 1, @appName, @dupApp)
END
END

COMMIT
END

RETURN0

     3.其实只是做了一点改动,就是加了一个top  1 ,我每次查的时候,只能第一次的AppID这样的话,就是说我多个项目只一个Session实例。上面的各种手段都做了,其实目的只有一个就是在项目中使用这个Session数据库(发点牢骚:说微软坑爹吧,其实一点都不假,他啥都替你想到了,我们这只简单的会使用他就行了,这也是一代一代.NET开发人员的悲剧,每次微软发生新的技术改动,我们这些苦逼的开发人员就要去学习学习,然后微软突然那天说我不对这个技术再做升级了,我要放弃他了,好了你就看吧,大街上一个个苦着脸的,有一半都是搞开发的。)。怎么在项目中使用他呢?修改 web.config   在system.web 加入或修改以下项

 <httpCookies domain="news.com" />
<sessionState mode="SQLServer" sqlConnectionString="data source=[Server];initial catalog=[DataBase];user id=[UserName];password=[Password]" allowCustomSqlDatabase="true" timeout="120"/> 


  4. OK,你大功告成了.记得重启一下IIS ,最好把自己本机上的cookie或垃圾项清除一下,这样效果更好。

  通过上面的一系列操作,终于OK了,在项目中使用的时候,就像我们平常一样赋值和调用就OK了。

  OK了,终于写完了。



目录
相关文章
ly~
|
2月前
|
缓存 监控 安全
反向代理服务器的常见故障有哪些?
反向代理服务器常遇到的故障包括配置错误、网络问题、性能瓶颈及安全漏洞。配置相关故障如错误监听端口、域名配置不当及代理转发规则错误,可使用`netstat -tuln`检查端口状态,并验证域名及DNS解析。网络故障涉及连接中断和带宽不足,利用`ping`和`traceroute`检测连通性,用`iftop`监控带宽。性能问题如资源耗尽和缓存不一致需通过`top`监控资源使用,并检查缓存策略。安全故障包括DDoS攻击和配置漏洞,应使用流量分析工具检测异常并加强安全配置,确保SSL/TLS加密和访问控制策略正确无误。
ly~
174 3
|
4月前
|
前端开发 应用服务中间件 nginx
前端服务器部署方式
【8月更文挑战第25天】前端服务器部署方式
110 1
|
4月前
|
缓存 负载均衡 应用服务中间件
Nginx 代理管理器强势登场!轻松设置反向代理,为你的网络安全与高效护航,快来探索!
【8月更文挑战第23天】Nginx 代理管理器(NPM)是一款强大的工具,用于简化反向代理的设置流程。反向代理能隐藏后端服务器的真实IP,提升安全性,实现负载均衡与缓存等功能。用户需先安装Nginx 代理管理器,然后通过其Web界面添加代理主机,指定代理名称、协议类型、服务器地址及端口等信息。对于HTTPS协议,还需上传SSL证书/密钥。完成设置后,可通过浏览器测试反向代理是否正常工作。Nginx 代理管理器还支持高级特性,如负载均衡、缓存及访问控制等。
127 1
|
6月前
|
存储 缓存 算法
分布式Session共享解决方案
分布式Session共享解决方案
68 0
|
存储 负载均衡 NoSQL
session共享解决方案
还在等什么,快来一起讨论关注吧,公众号【八点半技术站】,欢迎加入社群
session共享解决方案
|
NoSQL Redis Java
再谈session共享
之前一篇已经写过了《springboot中redis的使用和分布式session共享问题》,但是示例不完全,本文加以完善。 使用spring-session-data-redis解决session共享,而不需要再引入其他jar即可 集成简单,上手迅速。
1214 0
|
Web App开发 算法 NoSQL
app后端session共享问题
在分布式中,session如何共享,用户登陆要解决的问题如下图所示,通过nignx请求转发,到不同的应用模块中,需要判断用户有没有登陆验证通过,问题又来了,app的移动端不像浏览器,没有cookie,session,那么怎么搞呢?这时可以使用session外置方式解决,用redis统一管理session,用redis来模拟session。
1134 0
下一篇
DataWorks