2011-09-05 80 views
2

我有一種情況是這樣的:跳轉到另一個現有會話(使用PHP的默認會話處理程序)

UserJoe has session_id abc123 ABC123存儲在UserJoe行中的數據庫用戶表。

UserJoe calls AdminBob and reports a problem.

AdminBob needs to experience UserJoe's problem first hand

所以,我想這樣做:

01| $sessionId = getSessionId("UserJoe"); 
02| changeToExistingSession($sessionId); 
03| if($_SESSION["name"] == "UserJoe") echo "successfully changed users"; 

02行是我有點卡住了...任何想法?

(最好不要使用session_save_path()任何地方:P)

編輯:它只是在頁面執行期間。我想保持AdminBob的會話cookie不變。

+0

取決於身份驗證系統,你不需要他們的確切會話,你只需要設置會話var(s)用於id一個人(說用戶id) – 2011-09-05 05:13:22

+0

是啊..但我得到證明在會話變量中只存儲在用戶的會話文件中序列化。只能使用一次或兩次的東西。我*真的*需要模仿他們的會話。感謝您的建議:) – MicronXD

回答

4

如果您存儲UserJoe'在數據庫連同該報告的會話ID,那麼我認爲你可以使用session_id()AdminBob設置的會話ID UserJoe的會話ID。

<?php 
    if(!isset($_GET["id"])) 
    { 
    session_start(); 
    $_SESSION["foobar"] = $_GET["bar"]; 
    echo "Setting..."; 
    var_dump($_SESSION); 
    var_dump($_COOKIE); 
    } 
    else 
    { 
    session_id($_GET["id"]); 
    var_dump($_GET["id"]); 
    var_dump($_COOKIE); 
    session_start(); 
    var_dump($_SESSION); 
    } 
?> 

測試:在一個瀏覽器中打開此頁面並將bar設置爲任何值。

index.php?bar=blahblahblah 

打開一個新的瀏覽器,並訪問同一頁面,但沒有設置bar,得到PHPSESSID值,並將其設置爲id的價值

index.php?id=[value of PHPSESSID] 

您應該看到在其他瀏覽器會話新開的瀏覽器

+0

謝謝!讓我快速旋轉。我會讓你知道我得到了什麼。 – MicronXD

+0

似乎沒有工作。我試過這個:'function changeToExistingSession($ sess_id){session_id($ sess_id); session_start();}' – MicronXD

+0

我編輯了我的答案 –