免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 12063 | 回复: 12
打印 上一主题 下一主题

[SESSION] 跨服务器共享session [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-10-27 10:41 |只看该作者 |正序浏览
首先,建立保存session的表sessions

CREATE TABLE sessions (  
sid char(32) not null,  
expiry int(11) unsigned not null,  
value text not null,  
PRIMARY KEY (sid)  
);

注册session的页面session_reg.php

<?
session_start();//会话开始
$SID=session_id();//每次建立会话都会产生一个唯一的session id,函数session_id()不带参数时取得当前会话的id

$_SESSION["sesname"]="value_of_sesname";//注册变量
$_SESSION["sesname2"]="value_of_sesname2";
$sess_text=session_encode();//将当前会话的数据进行编码
$expiry=time()+3000;//设置session有效时间
$conn=mysql_connect($DB_HOST,$DB_USER,$DB_PASSWD);//连接数据库
mysql_select_db($DB_NAME);
mysql_query("insert into sessions values ('$SID','$expiry','$sess_text')";//保存当前会话的内容
header("location:http://xxx.xxx.com/echoses.php?SID=$SID";
?>;

使用session的页面echoses.php

<?
$conn=mysql_connect($DB_HOST,$DB_USER,$DB_PASSWD);
mysql_select_db($DB_NAME);
session_id($SID);//设置session-id,注意函数session_id()此时带有参数,就是前面传过来的SID.
                  //此时函数用来设置当前会话的id号(session-id),这种用法时,函数需在session_start()之前别调用
$rs=mysql_query("select value from sessions where sid='$SID'";//去会话内容
if(mysql_num_rows($rs)) session_decode(mysql_result($rs,0,"value");//将会话数据进行解码
session_start();//会话开始
echo "sesname=".$_SESSION["sesname"];
echo "<br />;sessname2=".$_SESSION["sesname2"];
?>;

此实现session共享的方法通过每次会话的session-id都不同,将会话内容保存在数据库中.然后通过session-id在将数据库中的会话数据取出进行验证.将会话内容保存在数据库中,可以实现session在不同主机之间共享.

论坛徽章:
0
13 [报告]
发表于 2009-09-25 13:24 |只看该作者
原帖由 艾斯尼勒 于 2005-10-27 23:22 发表
顺路问一下怎样让两个网站访问同一个cookie??
我曾经试过在一个apache下的两个虚拟主机上读写同一个名字的cookie的方法,可是不成功阿,怎么作到?cookie是有域名的...

你去了解一下P3P就知道了

论坛徽章:
0
12 [报告]
发表于 2009-09-25 11:17 |只看该作者
数据库会成为瓶颈吧?

论坛徽章:
0
11 [报告]
发表于 2009-08-31 22:13 |只看该作者
原来跨服务器共享能这么用 楼主真是个天才

[ 本帖最后由 diepics 于 2009-8-31 23:52 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2009-08-31 18:34 |只看该作者
我用php5时候发现一个小问题,就是session_start()的位置应该在session_decode()之前,要不就得不到两个定义好的session变量。:wink:

论坛徽章:
0
9 [报告]
发表于 2008-06-06 16:55 |只看该作者
够具体了!可做案例用了

论坛徽章:
0
8 [报告]
发表于 2007-11-30 14:32 |只看该作者
其实没必要用一张表来保存吧
如果你是跨服务器的session的话,有用户表,两个用户表中的用户可以互跨这挺好解决的!
当然前提是两个服务器都是你的,比如你有个商城,还有个论坛,用户是共享的就可以这样:
当用户从商城到论坛,把用户的用户名(必须是唯一的)与我们一个字符串(由某字符串--自定义的常量),并且把这个字符串加密与用户名一起传给另一台服务器,这新另一台服务器会去把那串字符串常量加密与传过来的加密后的字符串比较,如果一样,再去拿用户名,如果有就可以在这台服务器中登录--当然也可以开个session了!

论坛徽章:
0
7 [报告]
发表于 2005-10-28 09:49 |只看该作者

[SESSION] 跨服务器共享session

我是模仿http的header 信息 同用一个cookie 道理跟上面的一样 不过
应该是 header("Cookiexxx";

论坛徽章:
0
6 [报告]
发表于 2005-10-27 23:22 |只看该作者

[SESSION] 跨服务器共享session

顺路问一下怎样让两个网站访问同一个cookie??
我曾经试过在一个apache下的两个虚拟主机上读写同一个名字的cookie的方法,可是不成功阿,怎么作到?cookie是有域名的...

论坛徽章:
0
5 [报告]
发表于 2005-10-27 20:49 |只看该作者

[SESSION] 跨服务器共享session

搞定
http//localhost/test.php?SID=7050591b5f227493fd43b36e478c9aae
session_start();
header("Set-Cookie: PHPSESSID=".$_GET["SID"]."; path=/";//送session_id
$SID=session_id();
echo $SID;
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP