Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中两个子域之间的共享会话_Php_Jquery_Session - Fatal编程技术网

PHP中两个子域之间的共享会话

PHP中两个子域之间的共享会话,php,jquery,session,Php,Jquery,Session,我已经看到了许多在两个不同子域之间共享会话的解决方案,但它似乎不适合我。以下是我的设置: sub1.example.com(用户从这里开始) sub2.example.com(PHP文件包含在sub1中的文件中) 我使用以下代码在sub2包含的PHP文件中启动会话。决不会在sub1上的文件中直接启动会话 ini_set('session.cookie_domain', '.example.com' ); ini_set( 'session.cookie_httponly', 1 ); sessi

我已经看到了许多在两个不同子域之间共享会话的解决方案,但它似乎不适合我。以下是我的设置:

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();
我有一个存在于sub2上的Javascript文件,它也调用sub2中的PHP文件。但是,当我在Javascript文件调用的文件中使用session_start()时,会创建一个不同的会话,我通过从通过sub1调用的PHP文件和通过Javascript调用的PHP文件输出会话ID来确认这一点

编辑1:下面更好地描述了文件的连接方式以及何时调用session_start:

  • 用户从sub1上的index.php开始
  • index.php包括sub2上存在的preload.php。会话是在这里创建的
  • 用户单击login链接,该链接从sub2调用Javascript文件中的函数
  • Javascript从sub2调用login.php。此处创建的会话与原始会话不匹配
  • 一旦用户成功登录,页面将刷新,并再次调用preload.php。此处的会话与步骤2中的会话匹配
  • 编辑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();
    });
    
    }给了我一个想法,我可能需要把饼干传下去。我的代码可能不是最好的方法,但以下是我拼凑的:

    我将会话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信息。理想情况下,我希望避免这样做,但我也希望我的代码能够正常工作,现在就可以了。

    告诉我可能需要传递cookies。我的代码可能不是最好的方法,但以下是我拼凑的:

    我将会话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信息。理想情况下,我希望避免这样做,但我也希望我的代码能够正常工作,现在就可以了。

    “会话从来不会直接在sub1上的文件中启动”sub1中的所有文件都包括sub2上的PHP文件。会话启动代码在sub2中包含的文件中。然后向我们展示您的实际JavaScript部分。问题很可能就在那里的某个地方。您可能忽略了特别指示它将cookies与跨源请求一起传递。您可能在这里发现了一些问题。我正在使用的代码是原始的,只是托管在一个子域上,所以我不需要传递cookie信息。我刚刚发布了Javascript代码,希望你能告诉我在哪里可以这么做。你的观点2没有意义。PHP包括通过文件系统进行的工作。您绝对不应该通过HTTP包含其他PHP文件“sub1上的文件中永远不会直接启动会话”sub1中的所有文件都包含sub2中的PHP文件。会话启动代码在sub2中包含的文件中。然后向我们展示您的实际JavaScript部分。问题很可能就在那里的某个地方。您可能忽略了特别指示它将cookies与跨源请求一起传递。您可能在这里发现了一些问题。我正在使用的代码是原始的,只是托管在一个子域上,所以我不需要传递cookie信息。我刚刚发布了Javascript代码,希望你能告诉我在哪里可以这么做。你的观点2没有意义。PHP包括通过文件系统进行的工作。您绝对不应该通过HTTP包含其他PHP文件