我已经看到了许多用于在两个不同子域之间共享会话的解决方案,但是它似乎不适用于我。这是我的设置:
sub1.example.com(用户从此处开始)
sub2.example.com(PHP文件包含在sub1中的文件中)
我使用以下代码在sub2随附的PHP文件中启动会话。会话永远不会直接在sub1上的文件中启动。
ini_set('session.cookie_domain', '.example.com' );
ini_set( 'session.cookie_httponly', 1 );
session_name( 'mySession' );
session_start();
我有一个Java文件存在于sub2上,该文件也调用了sub2中的PHP文件。但是,当我在Javascript文件调用的文件中使用session_start()时,会创建一个不同的会话,通过从sub1调用的PHP文件和Javascript调用的PHP文件中输出会话ID,可以确认这一点。
编辑1:这是文件连接方式以及何时调用session_start的更好描述:
编辑2:这是调用login.php的Javascript(和jQuery):
function loginCheck()
{
var name = $('#logName').val();
var pass = $('#pass').val();
if (pass == '' || name == '')
return false;
var button = $('#loginSubmit');
$.post('SUB2ADDRESS/login.php', {name: name, pass: pass}, function(data){
button.bind('click', function() {loginCheck(); return false;});
if (!errorCheck(data))
location.reload();
});
}
CBroe让我想到了可能需要传递cookie。我的代码可能不是最好的方法,但是这是我拼凑的:
我将会话cookie的值以及我的POST请求发送到login.php。 我将会话代码更改为以下内容:
ini_set('session.cookie_domain', '.example.com' );
session_name( 'mySession' );
if (isset($_POST['sid']))
session_id($_POST['sid']);
session_start();
我必须删除HTTPOnly标志,因为我需要通过Javascript访问cookie信息。理想情况下,我想避免这样做,但是我也希望我的代码能够正常工作,并且现在可以执行。