(ASP)多个站点如何共享Session?
如题,IIS6下建有多个站点,www.abc.com,news.abc.com,ent.abc.com,现在要实现在这三个站点任意一个站点登陆,同时具有三个站点的用户权限。
如果有知道的,请不吝赐教。
问题点数:100、回复次数:47Top
1 楼ybfqlyq(Rossy|http://blog.ybfq.com)回复于 2005-12-12 10:10:35 得分 0
隨便登錄一個網站設個SESSION就行吧Top
2 楼fzhenmei(宁静致远)回复于 2005-12-12 10:17:39 得分 0
呵呵,要是这么简单,也不用提问了:)Top
3 楼tigerwen01(小虎)回复于 2005-12-12 10:29:36 得分 0
通过一个表来可以方便的实现这种功能。Top
4 楼fzhenmei(宁静致远)回复于 2005-12-12 10:34:03 得分 0
to:tigerwen01,能详细说说吗?我也想到使用数据库,但是发现并不好做。Top
5 楼fzhenmei(宁静致远)回复于 2005-12-12 10:42:36 得分 0
每个Session要对应一个使用者,或者说一台计算机,如何对应起来啊?ASP的Session是通过Cookies来实现了,客户机传递SessionId给服务器,于是服务器把Session和客户机对应起来。多个站点SessionId有没有可能重复?关键是怎么得到这个SessionId?
在用户从登陆站点跳到另外一个站点的时候要把SessionId传递过去,程序根据SessionId查找数据库...通过Url传?Top
6 楼KimSoft(革命的小酒天天醉-http://blog.csdn.net/kimsoft/)回复于 2005-12-12 10:42:44 得分 0
建议你看看wrox的一本书好象叫asp.net 高级编程,里面有一章是讲asp.net session处理的,肯定对你这个有帮助。。。Top
7 楼ahhisoft(无所事事)回复于 2005-12-12 10:46:10 得分 10
登陆任一网站。
给用户Session以后。顺便将Session信息写到表里。
转到其它网站以后首先检查表里的信息。
若有就赋给Session
不过这样做的话无法捕捉用户离线啊...Top
8 楼fzhenmei(宁静致远)回复于 2005-12-12 10:53:14 得分 0
to:ahhisoft(无所事事)
usera登陆了站A,userb也登陆了站a,
这个时候数据库里面就有两条记录。
关键是如何确定usera的Session记录是哪一条呢?
如果写在url里,那惨了...好多页面,几乎每一个页面都要用到Session...Top
9 楼fzhenmei(宁静致远)回复于 2005-12-12 10:54:49 得分 0
to:KimSoft(革命的小酒天天醉)
谢谢你建议,今天去书店逛逛。
但是现在的网站群是ASP的,要改成Asp.net的不知道要多久...不知道Asp.net的可不可以用到Asp上...Top
10 楼KimSoft(革命的小酒天天醉-http://blog.csdn.net/kimsoft/)回复于 2005-12-12 10:57:01 得分 20
不是,我说是那个asp.net里面说的session控制思想对你这个有帮助。
例如多机发布时,一个用户从A站点下了一个订单,可能又访问到B站点了,这时从A站点下的订单肯定要带过去。那本书里有很好的思路和办法,你看看,或许会有启发。而不是叫你转用.netTop
11 楼fzhenmei(宁静致远)回复于 2005-12-12 11:16:17 得分 0
to:KimSoft(革命的小酒天天醉)
呵呵,其实我想把网站转成.net...
嗯,希望这本书能有帮助,现在这个Session问题已经迫在眉睫...Top
12 楼ytzz(冲星中!多给分!谢谢!)回复于 2005-12-12 11:30:33 得分 10
ahhisoft(无所事事) 说的办法似乎可行...只是不知道怎么捕捉用户离线事件..
session里可以加入登陆信息啊,这样不就可以把用户区别开了吗?有什么问题?Top
13 楼fzhenmei(宁静致远)回复于 2005-12-12 11:59:41 得分 0
ytzz(炮灰曰:"不给分的我会记住你名字的!"):
session里可以加入登陆信息啊,这样不就可以把用户区别开了吗?有什么问题?
转到另外一个站的时候,就不知道表里Session是哪位的了!查询表,总的有个条件吧?因为表中(存放Session的表)不会只有一个用户的数据的Top
14 楼czq9966(宁录)(毛主席领导咱闹革命……)回复于 2005-12-12 13:08:41 得分 10
如果三个站点在同一台服务器上就可以用一个xml文件,或一个文本文件来实现,
用户登录修改那个文件,0为没有登录,1为已登录,在用户离开登录的时候,再进行一次修改那个文件,
可以试试这样可以了,我也没有做过,只是觉得这样应该可以实现Top
15 楼fzhenmei(宁静致远)回复于 2005-12-12 13:15:45 得分 0
to: czq9966(大家知道龟兔赛跑谁会赢?)
站点是在同一台服务器上,但是这个应该不是问题之所在:
用Xml、文本文件和数据库应该没有什么分别吧?如果可以,原理应该是一样的。
我想,问题的关键是登陆之后转到另外一个站点时,怎么找到登陆用户的Session信息。Top
16 楼fzhenmei(宁静致远)回复于 2005-12-12 14:17:32 得分 0
自己up一下Top
17 楼zwrtv(蝙蝠)回复于 2005-12-12 14:36:41 得分 0
路过学习下Top
18 楼wojiaogyp(三人行)回复于 2005-12-12 15:13:28 得分 0
关注
Top
19 楼sujinlin(秋色的记忆)回复于 2005-12-12 15:35:55 得分 10
我不知道你为什么要用Session?用Cokies不可以么?
如果你非要用,那么给你如下建议:
增加两个字段
IP,时间
代码执行原理:页面登录后获取IP,登录时间,存入数据库。
转站后先获取IP,如相同判断登录时间与现在时间差,(差值自己定义)如果差值小于某个值默认相应的IP已经登录,根据IP确定用户,然后对Session付值。
判断Session是否存在,如果不存在转登录页面。
PS:在处理登录时间上要注意,因该在每次浏览页面时对时间更新。
Top
20 楼fzhenmei(宁静致远)回复于 2005-12-12 15:56:44 得分 0
代码执行原理:页面登录后获取IP,登录时间,存入数据库。
根据ip, 如果同一局域网里的不同机器怎么办?他们对外的ip可能是一样的啊?
------------
我不知道你为什么要用Session?用Cokies不可以么?
呵呵,我并不是一样要用Session,因为原来的程序使用Session保持用户的信息,如果改用Cookies,要改动较多。
------------
目前正在用Cookies试验中...Top
21 楼fzhenmei(宁静致远)回复于 2005-12-12 16:01:58 得分 0
就像搜狐通行证,网易通行证那样,不知道他们是怎么实现的呢?安不安全呢?
登陆通行证之后不是在所有其他站点都可以畅通无阻了吗?
当一个网站因为业务需要分解成多个网站的时候,这个问题是不得不解决了...暂时还没有好的解决方法...研究中...
另外用Asp做权限管理,不用Session是不是太麻烦了?Top
22 楼love910(跳跳糖)回复于 2005-12-12 16:36:10 得分 0
他们采用的都是一个用户ID
判断的时候是不会变化的!
你也可以把那几个网站的用户ID用一个表或者数据库Top
23 楼fzhenmei(宁静致远)回复于 2005-12-12 16:43:45 得分 0
to : love910(跳跳糖)
你也可以把那几个网站的用户ID用一个表或者数据库--
--〉这个不是问题,关键是从一个站转到另外一个站怎么知道是哪个用户在跳转?必须告诉程序是谁转过来了才能给用户相应的权限等等。因此问题在于怎么把用户的信息很好的传递到其他站点...
信息保存在数据库中也要有个关键字能够把用户的信息找出来啊?
...我目前的想法是使用Cookies把用户的信息传到另外的站点。
不知哪位有更好的办法?Top
24 楼jamila8(曾)回复于 2005-12-12 16:55:22 得分 0
最好用COOKIESTop
25 楼fangq(jack)回复于 2005-12-12 17:08:16 得分 0
如果是这样还是使用CookieTop
26 楼wojiaogyp(三人行)回复于 2005-12-12 18:22:24 得分 0
cookie怎么做?a站点的cookie可以传给b站点?怎么传?Top
27 楼wojiaogyp(三人行)回复于 2005-12-12 18:43:07 得分 0
a,b,c三个站点,在a站点登陆了,那么就隐蔽的调用b站点和c站点的登陆权限赋值页面,这时用户在三个站点就可以通用了.
你可以用很小的iframe或者宽为1的frame调用其他站点的页面.
漏洞还有,继续讨论Top
28 楼fzhenmei(宁静致远)回复于 2005-12-12 20:18:49 得分 0
to:wojiaogyp(三人行)
cookie怎么做?a站点的cookie可以传给b站点?怎么传?
-----
如下设置DoMain
Response.Cookies("1").DoMain = ".abc.com"
这样www.abc.com/news.abc.com/xxx.abc.com 都可以访问到这个Cookies,这样就传过来了,但是使用Cookies有一些问题,比如安全,浏览者的浏览器必须允许Cookies等等:)
隐蔽的调用b站点和c站点的登陆权限赋值页面?
你是说同时登陆三个站点吗?Top
29 楼jzywh(江大鱼)回复于 2005-12-12 20:20:25 得分 0
用cookieless的session呀!
Top
30 楼jzywh(江大鱼)回复于 2005-12-12 20:21:11 得分 0
http://www.abc.com/(dfertertertry)list.aspxTop
31 楼assdeng(山野村夫)回复于 2005-12-12 20:24:48 得分 0
见过一个神人做的系统
有www.aaa.com,www.bbb.com,www.ccc.com等多个网站,
另外还有一个www.check.com的网站
A、B、C等网站通过XMLHTTP到www.check.com提取相同用户的权限列表,通过此列表来控制A、B、C等网站。他称之为通用权限控制系统
Top
32 楼leelong80(小龙)回复于 2005-12-12 20:32:52 得分 30
小弟遇到过样的项目,你要知道Session也是基于服务器的cookies的。
那么就有方法解决了。用数据库做状态存储,要加上时间戳。
登陆之先查www.aaa.com,www.bbb.com,www.ccc.comTop
33 楼leelong80(小龙)回复于 2005-12-12 20:36:48 得分 0
依次查一下session之后用url将登陆状态传回当前站点,不过传的时候要加密呀,在用这个id 到数据库 数库理放的,密匙,哈哈,很好玩,现在有点记不清了,有点163 的社区,个人思法,哈哈,祝你成功。Top
34 楼leelong80(小龙)回复于 2005-12-12 20:39:33 得分 0
不过有时要是出现的服务器超时,那就要看你怎么处理了,那个时间戳,就是做这个的。要不就让他在当前站点,重新登录最好做了,^-^Top
35 楼fzhenmei(宁静致远)回复于 2005-12-12 20:57:52 得分 0
to jzywh(江大鱼)
cookieless?
http://www.abc.com/(dfertertertry)list.aspx
这个Asp能做吗?
-------------------
to leelong80(小龙)
你要知道Session也是基于服务器的cookies的
那么就有方法解决了。用数据库做状态存储,要加上时间戳。
登陆之先查www.aaa.com,www.bbb.com,www.ccc.com
--我想直接把cookies的数据传到另外一个站点的Session中,呵呵,这样就由iis去维护,省得用数据库维护还要加时间戳,并且用户关掉浏览器而不是退出数据表可能不能清空,判断复杂,Session就没有这些烦恼,用户关掉浏览器就=退出。
--每次用户在站点之间跳转的时候就传一次Cookies到另外一个站点的Session中,这样子不知道有没有问题?还是先试验一番吧:)Top
36 楼fzhenmei(宁静致远)回复于 2005-12-12 21:49:43 得分 0
to assdeng(山野村夫)
通用权限控制系统
呵呵,好像越是通用的程序,做起来越复杂...
用XMLHTTP也好,其他的也好,要获取用户的权限列表总得传个参数到www.check.com,让check知道给用户什么权限好吧?关键就在可以同时被www.aaa.com,www.bbb.com,www.ccc.com共享的这个用户的Id(也许是其他参数)。解决了这个问题,我想就好办了。Top
37 楼setve(朱传辉)回复于 2005-12-12 23:26:36 得分 0
你试试登陆一个网站后将所有信息写到一个文件里,然后再让另外的两个网站从这个文件中提取信息登陆试试Top
38 楼iguohong(SharnSong)回复于 2005-12-13 08:26:08 得分 0
每个页面都加一个隐含属性(用来传session),到其它站时就判断session值Top
39 楼fzhenmei(宁静致远)回复于 2005-12-13 08:36:39 得分 0
谢谢上面两位的建议:)Top
40 楼zhanghongwen(流氓蚊子)回复于 2005-12-13 08:54:24 得分 0
UP一下.Top
41 楼wojiaogyp(三人行)回复于 2005-12-13 08:59:02 得分 0
那就用cookie吧,安全是问题,
浏览器不支持cookie,这个不用考虑吧,session是基于cookie的,若不支持cookie,就是只有一个站点,也不会顺利运行的吧.
顶多跟某些论坛一样,在登陆前提示用户打开cookie吧.Top
42 楼gameboy766(古巴)回复于 2005-12-13 09:07:23 得分 0
最简单的办法,在登录时,将帐号密码同时提交到
www.aaa.com,www.bbb.com,www.ccc.com三个网站。Top
43 楼fzhenmei(宁静致远)回复于 2005-12-13 09:19:03 得分 0
浏览器不支持cookie,这个不用考虑吧,session是基于cookie的,若不支持cookie,就是只有一个站点,也不会顺利运行的吧.
--是的,若不支持cookie,就是只有一个站点,也不会顺利运行的吧--连Cookies都不打开,浏览者也有点...
to:gameboy766(古巴) www.aaa.com,www.bbb.com,www.ccc.com 你的这个三个站点应该是不能用Cookies的,Cookies好像只能支持二级域名不相同的情况...Top
44 楼gamestar1(海洋之星)回复于 2005-12-13 09:44:02 得分 0
用xmlhttp 可以实现 用户关闭浏览器时 更新表中用户在线的状态Top
45 楼fzhenmei(宁静致远)回复于 2005-12-13 09:56:20 得分 0
to:gamestar1(海洋之星)
xmlhttp,没有用过...哦,好像小偷程序用过:)Top
46 楼isline(缘清)回复于 2005-12-13 11:36:48 得分 10
搜狐网易用的passport登陆,每年交给微软10+美金,是买的服务。
你若不想花钱,现在最好的方法就是在登录成功一个域后post用户名密码到另一个域继续登录,这样一个接一个的登录,知道所有域登录完毕。Top
47 楼fzhenmei(宁静致远)回复于 2005-12-13 11:56:00 得分 0
搜狐网易用的passport登陆,每年交给微软10+美金,是买的服务。
--啊?!搜狐网易自己搞不定?
能不花钱就不花钱吧:)
--一个接一个的登录,你用什么保持用户的状态信息?Top




