因跨网站,我把 php.ini 中的 session.cookie_domain=.aaa.com 可是别的网站bbb.com 都登录不了,有什么办法可以解决吗? .aaa.com ,bbb.com 同一服务器,但他们之间没有用户关系。不知道 有什么好办法? bbs.aaa.com ,look.aaa.com ,可以用一个 session ,bbb.com 也不影响。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 方法之一,用数据库session不用文件session 数据库太麻烦了,我只想把 aaa.com 和 bbb.com 区分开,不行吗? session.cookie_domain =.aaaa.com;.bbb.com;这样写也不行呀。 别做梦了,这是浏览器禁止的!!!要不然我随便用个域名就能得到你浏览器所有的cookie,基于cookie的验证全部失效 参考我的QQ空间中摘录的文件:服务器端可控情形的Javascript跨域访问解决方法 http://user.qzone.qq.com/79730462/blog/20 用数据库共享SESSION, 挺方便的,不同域名不过要传一个SESSION_ID过去。最近研究了一下,没有问题,不过如果链接多的话太麻烦,需要传SESSIONid过去,应该还有其他办法,有时间再研究。希望对你有用。//func.php<?class session { // session-lifetime var $lifeTime; // mysql-handle var $dbHandle; function open($savePath, $sessName) { // get session-lifetime $this->lifeTime = get_cfg_var("session.gc_maxlifetime"); // open database-connection $dbHandle = @mysql_connect("localhost","root","123"); $dbSel = @mysql_select_db("test",$dbHandle); // return success if(!$dbHandle || !$dbSel) return false; $this->dbHandle = $dbHandle; return true; } function close() { $this->gc(ini_get('session.gc_maxlifetime')); // close database-connection return @mysql_close($this->dbHandle); } function read($sessID) { // fetch session-data $res = mysql_query("SELECT value AS d FROM sessions WHERE sesskey = '$sessID' AND expiry > ".time(),$this->dbHandle); // return data or an empty string at failure if($row = mysql_fetch_assoc($res)) return $row['d']; return ""; } function write($sessID,$sessData) { // new session-expire-time $newExp = time() + $this->lifeTime; // is a session with this id in the database? $res = mysql_query("SELECT * FROM sessions WHERE sesskey = '$sessID'",$this->dbHandle); // if yes, if(mysql_num_rows($res)) { // ...update session-data mysql_query("UPDATE sessions SET expiry = '$newExp', value = '$sessData' WHERE sesskey = '$sessID'",$this->dbHandle); // if something happened, return true if(mysql_affected_rows($this->dbHandle)) return true; } // if no session-data was found, else { // create a new row mysql_query("INSERT INTO sessions ( sesskey, expiry, value) VALUES( '$sessID', '$newExp', '$sessData')",$this->dbHandle); // if row was created, return true if(mysql_affected_rows($this->dbHandle)) return true; } // an unknown error occured return false; } function destroy($sessID) { // delete session-data mysql_query("DELETE FROM sessions WHERE sesskey = '$sessID'",$this->dbHandle); // if session was deleted, return true, if(mysql_affected_rows($this->dbHandle)) return true; // ...else return false return false; } function gc($sessMaxLifeTime) { // delete old sessions mysql_query("DELETE FROM sessions WHERE expiry < ".time(),$this->dbHandle); // return affected rows return mysql_affected_rows($this->dbHandle); } } $session = new session(); session_set_save_handler(array(&$session,"open"), array(&$session,"close"), array(&$session,"read"), array(&$session,"write"), array(&$session,"destroy"), array(&$session,"gc")); session_start(); ?>//aaa.com 中的一文件a.php<?include("func.php");$_SESSION['A'] = 'test';echo '<a href = "bbb.com/b.php?sid=".session_id().">共享SESSION</a>';?>//bbb.com 中文件b.php<?session_id($_REQUEST['sid']); //注意这个放前面,不然两域名下的SESSIONID会不一样,值就不同了。include("func.php");echo $_SESSION['A']; //输出test 实现共享?> 不过也可以用COOKIE保存SESSION ID , 但如果用户浏览器不支持就门都没有。 session只要有ID可以共用但这种方式或仍否实现共同登录仍待考证个人认为基本上可行不大登录无非两种:一种是session;另一咱是cookie,而且session也基于cookie便cookie均是有域限制的 [新手请教]PHP写入MySQL数据库的问题 imap_open()的奇怪问题 在北京PHP程序员月薪2000都应该会什么? 大侠们!!帮帮忙! php单例问题 请教“控制流程-遍历数组”?在线等。 今天看到老板解雇一个同事,心里感觉很难受 PHPLIB模板内多个自有内循环区块的问题?????? ????怎样删除session文件???? 不同类取键值对中的值的方法 关于SSL,求教! 求解, 帮看看
服务器端可控情形的Javascript跨域访问解决方法
http://user.qzone.qq.com/79730462/blog/20
最近研究了一下,没有问题,不过如果链接多的话太麻烦,需要传SESSIONid过去,应该还有其他办法,有时间再研究。希望对你有用。//func.php
<?
class session {
// session-lifetime
var $lifeTime;
// mysql-handle
var $dbHandle;
function open($savePath, $sessName) {
// get session-lifetime
$this->lifeTime = get_cfg_var("session.gc_maxlifetime");
// open database-connection
$dbHandle = @mysql_connect("localhost","root","123");
$dbSel = @mysql_select_db("test",$dbHandle);
// return success
if(!$dbHandle || !$dbSel)
return false;
$this->dbHandle = $dbHandle;
return true;
}
function close() {
$this->gc(ini_get('session.gc_maxlifetime'));
// close database-connection
return @mysql_close($this->dbHandle);
}
function read($sessID) {
// fetch session-data
$res = mysql_query("SELECT value AS d FROM sessions
WHERE sesskey = '$sessID'
AND expiry > ".time(),$this->dbHandle);
// return data or an empty string at failure
if($row = mysql_fetch_assoc($res))
return $row['d'];
return "";
}
function write($sessID,$sessData) {
// new session-expire-time
$newExp = time() + $this->lifeTime;
// is a session with this id in the database?
$res = mysql_query("SELECT * FROM sessions
WHERE sesskey = '$sessID'",$this->dbHandle);
// if yes,
if(mysql_num_rows($res)) {
// ...update session-data
mysql_query("UPDATE sessions
SET expiry = '$newExp',
value = '$sessData'
WHERE sesskey = '$sessID'",$this->dbHandle);
// if something happened, return true
if(mysql_affected_rows($this->dbHandle))
return true;
}
// if no session-data was found,
else {
// create a new row
mysql_query("INSERT INTO sessions (
sesskey,
expiry,
value)
VALUES(
'$sessID',
'$newExp',
'$sessData')",$this->dbHandle);
// if row was created, return true
if(mysql_affected_rows($this->dbHandle))
return true;
}
// an unknown error occured
return false;
}
function destroy($sessID) {
// delete session-data
mysql_query("DELETE FROM sessions WHERE sesskey = '$sessID'",$this->dbHandle);
// if session was deleted, return true,
if(mysql_affected_rows($this->dbHandle))
return true;
// ...else return false
return false;
}
function gc($sessMaxLifeTime) {
// delete old sessions
mysql_query("DELETE FROM sessions WHERE expiry < ".time(),$this->dbHandle);
// return affected rows
return mysql_affected_rows($this->dbHandle);
}
}
$session = new session();
session_set_save_handler(array(&$session,"open"),
array(&$session,"close"),
array(&$session,"read"),
array(&$session,"write"),
array(&$session,"destroy"),
array(&$session,"gc"));
session_start();
?>//aaa.com 中的一文件a.php
<?
include("func.php");
$_SESSION['A'] = 'test';
echo '<a href = "bbb.com/b.php?sid=".session_id().">共享SESSION</a>';
?>//bbb.com 中文件b.php
<?
session_id($_REQUEST['sid']); //注意这个放前面,不然两域名下的SESSIONID会不一样,值就不同了。
include("func.php");
echo $_SESSION['A']; //输出test 实现共享
?>
但这种方式或仍否实现共同登录仍待考证个人认为基本上可行不大登录无非两种:一种是session;另一咱是cookie,而且session也基于cookie便cookie均是有域限制的