Chinaunix

标题: [SESSION] 跨服务器共享session [打印本页]

作者: erwolf    时间: 2005-10-27 10:41
标题: [SESSION] 跨服务器共享session
首先,建立保存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在不同主机之间共享.
作者: HonestQiao    时间: 2005-10-27 12:03
标题: [SESSION] 跨服务器共享session
$SID如果被伪造或者被重用呢》
作者: 夜猫子    时间: 2005-10-27 12:10
标题: [SESSION] 跨服务器共享session
sid被重用的可能性很小,因为每次会先向服务器传递sid,如果没有传递的话才会分配新的sid,只要客户端浏览器cookie内的sid能够被两个网站读取就没有问题。
作者: ydlhero    时间: 2005-10-27 20:26
标题: [SESSION] 跨服务器共享session
header(Cookie: PHPSESSID=".$SID.";
  
应该可以 重用的 我有写过 一个在不用图书认证的 灌水 程序

登陆->;灌水 用的是同一个session_id
作者: ydlhero    时间: 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;
作者: 艾斯尼勒    时间: 2005-10-27 23:22
标题: [SESSION] 跨服务器共享session
顺路问一下怎样让两个网站访问同一个cookie??
我曾经试过在一个apache下的两个虚拟主机上读写同一个名字的cookie的方法,可是不成功阿,怎么作到?cookie是有域名的...
作者: ydlhero    时间: 2005-10-28 09:49
标题: [SESSION] 跨服务器共享session
我是模仿http的header 信息 同用一个cookie 道理跟上面的一样 不过
应该是 header("Cookiexxx";
作者: freeren_17    时间: 2007-11-30 14:32
其实没必要用一张表来保存吧
如果你是跨服务器的session的话,有用户表,两个用户表中的用户可以互跨这挺好解决的!
当然前提是两个服务器都是你的,比如你有个商城,还有个论坛,用户是共享的就可以这样:
当用户从商城到论坛,把用户的用户名(必须是唯一的)与我们一个字符串(由某字符串--自定义的常量),并且把这个字符串加密与用户名一起传给另一台服务器,这新另一台服务器会去把那串字符串常量加密与传过来的加密后的字符串比较,如果一样,再去拿用户名,如果有就可以在这台服务器中登录--当然也可以开个session了!
作者: ylcqen    时间: 2008-06-06 16:55
够具体了!可做案例用了
作者: B1nggou    时间: 2009-08-31 18:34
我用php5时候发现一个小问题,就是session_start()的位置应该在session_decode()之前,要不就得不到两个定义好的session变量。:wink:
作者: diepics    时间: 2009-08-31 22:13
原来跨服务器共享能这么用 楼主真是个天才

[ 本帖最后由 diepics 于 2009-8-31 23:52 编辑 ]
作者: whtech    时间: 2009-09-25 11:17
数据库会成为瓶颈吧?
作者: 李纳斯    时间: 2009-09-25 13:24
原帖由 艾斯尼勒 于 2005-10-27 23:22 发表
顺路问一下怎样让两个网站访问同一个cookie??
我曾经试过在一个apache下的两个虚拟主机上读写同一个名字的cookie的方法,可是不成功阿,怎么作到?cookie是有域名的...

你去了解一下P3P就知道了




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2