如何让IIS下多个如何设置虚拟目录录共享Session

  对于大多数的网站来说,都会使用Session来维护用户在一次会话中操作;Session对于任何Web项目来说都是必不可少的(当然除去那里网站里不包含任何用户操作的,^_^这个对于Web2.0时代的网站来说好像是不太可能的吧)。对于单独的站点来说,一个站点只用一个Session就OK了,但对于同时多个站点来说,如何对多个站点时实现Session共享呢?
  常见的作法有:
使用Cookie方式实现多个站点间的共享(这种方式只限于几个站点都在同一域名的情况下);
使用.net自动的状态服务(Asp.net State Service);
使用.net的Session数据库;
使用MemcachedDB。
  以上几种方案各有优点,至于每种方式的优点在那里,缺点在那里?一时半会真的很难说清,如果有一篇文章就能说清的,那都是扯蛋,这种东西没有在实际中使用,单单在表现上说这个方案好那个方案不好,都是扯蛋。
  我们的项目现在采用的是第三种方案,使用Session数据库解决多站点的Session共享。有不同看法的朋友都可以聊一下,下面说一下我们的实现方式:
既然使用Session数据库了,当然必须要先对数据库进行创建,既然是使用微软的方案了,微软肯定也就为大家提供了相应的实现方式。通过命令行方式进入:
1 C:\Windows\Microsoft.NET\Framework64\v4.0.30319
在此目录下运行:
1 aspnet_regsql.exe -sstype c -ssadd -d 你的数据库名 -U 用户名 -P 密码 -S 数据库服务地址
注意:此处的参数是区分大小写的;执行完上述命令后,会进行Session数据库创建阶段,创建完成后可以打开数据库查看创建是否成功。
Session数据库创建成功了并不代表就可以实现多项目的Session共享了,还需要对目前的Session数据库做一些小小的手脚,其实就是为了欺骗数据库说&哎,我就一个应用程序在运行。^_^&。下面来看看怎么做这点小手段:
1ALTERPROCEDURE[dbo].[TempGetAppID]
3@appIdint OUTPUT
5SET@appName=LOWER(@appName)
6SET@appId=NULL
8SELECTtop1@appId= AppId
9FROM[SNSSessionDB].dbo.ASPStateTempApplications 10--WHERE AppName = @appName11 12IF@appIdISNULLBEGIN 13BEGINTRAN 14 15SELECT@appId= AppId 16FROM[SNSSessionDB].dbo.ASPStateTempApplications WITH (TABLOCKX) 17WHERE AppName =@appName 18 19IF@appIdISNULL 20BEGIN 21EXEC GetHashCode @appName, @appId OUTPUT 22 23INSERT[SNSSessionDB].dbo.ASPStateTempApplications 24VALUES 25
(@appId, @appName) 26 27IF@@ERROR=2627 28BEGIN 29DECLARE@dupApp tAppName 30 31SELECT@dupApp=RTRIM(AppName) 32FROM[SNSSessionDB].dbo.ASPStateTempApplications
33WHERE AppId =@appId 34 35RAISERROR('SQL session state fatal error: hash-code collision between applications ''%s'' and ''%s''. Please rename the 1st application to resolve the problem.',
3618, 1, @appName, @dupApp) 37END 38END 39 40COMMIT 41END 42 43RETURN0
其实只是做了一点改动,就是加了一个top 1 ,我每次查的时候,只能第一次的AppID这样的话,就是说我多个项目只一个Session实例。
上面的各种手段都做了,其实目的只有一个就是在项目中使用这个Session数据库(发点牢骚:说微软坑爹吧,其实一点都不假,他啥都替你想到了,我们这只简单的会使用他就行了,这也是一代一代.NET开发人员的悲剧,每次微软发生新的技术改动,我们这些苦逼的开发人员就要去学习学习,然后微软突然那天说我不对这个技术再做升级了,我要放弃他了,好了你就看吧,大街上一个个苦着脸的,有一半都是搞开发的。)。怎么在项目中使用他呢?修改 web.config&& 在system.web 加入或修改以下项
1 &httpCookies domain="" /& 2 &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了,终于写完了。
阅读(...) 评论()拒绝访问 | www. | 百度云加速
请打开cookies.
此网站 (www.) 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(3ccd780a8394437c-ua98).
重新安装浏览器,或使用别的浏览器.net同站点多虚拟目录下的Session共享思路_ASP.NET技巧_动态网站制作指南
.net同站点多虚拟目录下的Session共享思路
来源:人气:7501
  公司搞了个办公系统,由于一些模块多人分开开发的而事先也没规划好,到把一些模块合起来的时候共享就是个问题了(郁闷啊为啥不事先规划好呢~~~~),网上找了不少方案,总结了主要以以下几种:Session存放到,不管多站点还是虚拟目录调用都是方便的来通过Cookie方式传递,同一站点不同虚拟目录可以共享主站的Cookie的跨应用程序进行 Forms 身份验证通过WebService或类似WebService的方式返回主站的Session内容把多个虚拟目录下的.net程序合并起来,当然这个合并最好是这几个.net程序编写风格上最好类似,要不会产生不少额外的工作量,到时候是很头痛的  注意:不存在其它更方便的更直接的Session共享方式了,看到此日志的朋友也就别再苦苦搜索了,以上的几种解决方案选一种吧。中间两种方式特别要注意数据的加密及请求Session数据来源来验证  没特别说明的均为同一Web站点,把当前Web站点的Session值共享给其下的虚拟目录中的.net应用程序。出处:?id=416
优质网站模板相关文章推荐
经常听到程序员会说,明明设置了很长的超时时间,为什么没有生效呢?session 很快就被清空了。
asp.net 默认的 session state 模式是 in proc(进程内),数据是在网...
在调优iis的时候,朋友分享给我一个特别棒的设置方法步骤,感谢好朋友的分享。
IIS应用程序池多工作进程设置及Session共享
微软的IIS作为Windows平台下Asp.N...
asp.net 中解决 nginx+ iis
session 一致性的解决方案
PC端考试系统在外网进行,发布多个IIS服务器,用Nginx解决负载均衡的问题,用Redis解决session共享的问题,具体操作如下。
程序中修改:
1、在配置文件中...
第一种方式,把应用放到一个公共目录,修改server.xml中配置
的相对目录.如果没有此项,默认 为/webapps. 它将匹配请求和自己的Context的路径,并把请求转交给对应的Context...
多个应用程序实例间共享数据
Windows在一个Win32程序的地址空间周围筑了一道墙。通常,一个程序的地址空间中的数据是私有的,对别的程序而言是不可见的。但是在一个应用程序的多个实例间共享数据还是...
文件的内存映射的主要用途有两个方面,第一是用来在多个进程之间共享数据,第二是直接用内存映射文件来访问磁盘上的数据文件,无需要进行文件的I/O操作。进程间共享数据有很多种方法,今天,我主要讲的是内存映射...
他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)鍦↖IS涓?缓绔嬭櫄鎷熺洰褰曚笌瀵规枃浠跺す璁剧疆web鍏变韩鏈変粈涔堝尯鍒

我要回帖

更多关于 如何建立虚拟目录 的文章

 

随机推荐