2016-03-18 21 views
0

file1.php如何在整個PHP文件中訪問SESSION變量?

<?php 
session_start(); 
$email = $_POST['email']; 
$password = $_POST['pass']; 

$_SESSION["email"] = $email; 
$_SESSION["pass"] = $password; 

//echo $_SESSION["email"]; 
header("location:file2.php"); 
?> 

file2.php

<?php 
session_start(); 

$email = $_SESSION["email"]; 

echo $_SESSION["email"]; 
?> 

我想顯示用戶登錄時使用的電子郵件。該錯誤在file2.php的第二行顯示「Undefined index email」。我看過的每一處都說要將session_start()放在每個文件的頂部,並在file1.php中創建會話,然後通過file2.php的第2行訪問它。

我唯一能想到的是讓這不起作用的是,這不是使用HTML。我有一個android應用程序,用戶輸入他們的電子郵件和密碼。我的應用程序將憑據提交給file1.php。我知道它是正確的,因爲如果我取消註釋file1.php的第6行,echo迴應正常工作。由於某種原因,它不會在file2.php中回顯。

我需要這個工作的原因是因爲我希望能夠在任何php文件(用於註銷,顯示信息等)中使用電子郵件會話變量,並且如果我不能在此工作簡單的例子我不會去哪裏。

+0

'我有一個android應用程序,用戶輸入他們的電子郵件和密碼。我的應用程序將憑證提交給file1.php'那麼應用程序是否同樣訪問file2.php,或者您是否以其他方式執行此操作? – skrilled

+0

沒有應用程序不直接訪問file2.php。這就是爲什麼我希望能夠做到這個簡單的例子,因爲我需要每個PHP頁面來知道哪些電子郵件當前登錄以便其他查詢目的。該應用程序訪問某些單獨的PHP頁面的不同的東西,但我需要能夠根據在file1.php中輸入的電子郵件查詢數據庫。 – gfuller16

回答

0

該網站上有幾個類似的問題(例如this)。他們建議使用isset方法確保您的會話變量可用。

在你的情況下,它可以在file1.php的header呼叫前加入,所以

if (isset($_SESSION['email'])) { 
    header("location:file2.php"); 
} 
0

的PHP中默認是基於cookie的會話,你的APP不使用cookies,需要針對數據庫實現另一種類似自我生成標記的方法會話,可能使用REST框架。

另一種解決方案可以模擬與頭的Cookie,但我不知道這是可能的Android中通過cookie支持

0

會話工作,你的Android應用程序的請求類支持呢?

看來你的客戶端發送請求到file1.php,然後服務器響應cookie中的會話ID,然後你的應用程序重定向到file2.php。通常情況下,瀏覽器發送前一個會話ID來告訴服務器哪個會話屬於它自己。請檢查您是否在發送請求時發送此cookie file2.php