簡體   English   中英

在 PHP 中的兩個子域之間共享 Session

[英]Shared Session Between Two Subdomains in PHP

我已經看到了許多在兩個不同子域之間共享 session 的解決方案,但它似乎對我不起作用。 這是我的設置:

sub1.example.com(用戶從這里開始)

sub2.example.com(PHP 文件包含在 sub1 中的文件中)

我使用以下代碼在 sub2 包含的 PHP 文件中啟動 session。 session 永遠不會直接在 sub1 上的文件中啟動。

ini_set('session.cookie_domain', '.example.com' );
ini_set( 'session.cookie_httponly', 1 );
session_name( 'mySession' );
session_start();

我有一個存在於 sub2 上的 Javascript 文件,它也調用 sub2 中的 PHP 文件。 When I use session_start() in the files called by the Javascript file, though, a different session is created, which I confirmed by outputting the session IDs from the PHP files called via sub1 and the PHP files called via Javascript.

編輯 1:這是對文件如何連接以及何時調用 session_start 的更好描述:

  1. 用戶從 sub1 上的 index.php 開始。
  2. index.php 包括 preload.php 存在於 sub2 上。 Session 在這里創建。
  3. 用戶單擊登錄鏈接,該鏈接從 sub2 調用 Javascript 文件中的 function。
  4. Javascript 從 sub2 調用 login.php。 此處創建的 Session 與原始 session 不匹配。
  5. 用戶成功登錄后,頁面會刷新並再次調用 preload.php。 此處的 session 與步驟 2 中的 session 匹配。

編輯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給了我一個想法,我可能需要傳遞 cookies。 我的代碼可能不是最好的方法,但這是我拼湊起來的:

我將 session cookie 的值連同我的 POST 請求一起發送到 login.php。 我將 session 代碼更改為以下內容:

ini_set('session.cookie_domain', '.example.com' );
session_name( 'mySession' );
if (isset($_POST['sid']))
    session_id($_POST['sid']);

session_start();

我不得不刪除 HTTPOnly 標志,因為我需要通過 Javascript 訪問 cookie 信息。 理想情況下,我想避免這樣做,但我也希望我的代碼能夠正常工作,並且現在可以。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM