php的session跨域不断变化ID

noSmile 发布于 2014/01/14 10:36
阅读 2K+
收藏 4
PHP

主域名www.a.com,二级域名t.a.com,需要实现session跨域,我的例子没什么问题啊!

t.a.com的请求

ini_set('session.cookie_domain','.a.com');

session_start();

echo file_get_contents('http://www.a.com/tmp.php');

www.a.com的tmp.php

ini_set('session.cookie_domain','.a.com');

session_start();

echo session_id();

这个例子够简单吧。可是t.a.com的session_id固定,而www.a.com的session_id与它不同,并且每次刷新都不一样,怎么办啊!?!?

加载中
0
hylent
hylent
// a.php
$u = 'http://test.localhost/ses/b.php';

$ch = curl_init();
curl_setopt_array($ch, array(
    CURLOPT_URL => $u,
    CURLOPT_COOKIEFILE => __DIR__ . '/cookie',
    CURLOPT_COOKIEJAR => __DIR__ . '/cookie',
));

curl_exec($ch);
// b.php
// ini_set('session.cookie_domain', '.localhost');
session_start();

echo session_id();

我试了一下,可以的。

0
hylent
hylent

默认下,服务器端的php,看客户端http请求中的cookie数组中,是否有PHPSESSID这个键,如果存在,则根据这个PHPSESSID尝试加载session(默认是存在/tmp目录下的文件);如果不存在,则创建一个新的PHPSESSID,并在响应的时候保存这个session并通过setcookie传给客户端。

你这里使用了file_get_contents() 这个函数进行GET请求是不发送cookie的,所以session_id每次都会变。

noSmile
noSmile
我看了curl的请求,每次发送的cookie里面PHPSESSID都是一样的啊
hylent
hylent
回复 @noSmile : curl的话 要设置一下cookie文件 然后每次curl的时候使用同一个cookie文件进行访问
noSmile
noSmile
可是我用curl请求也没用。
0
Tuesday
Tuesday

echo file_get_contents('http://www.a.com/tmp.php?ssionid=$id');

把你的id带着走...

0
hylent
hylent

ini_set('session.cookie_domain', '.localhost');

加上这句就不行,注释掉就可以。

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部