2013-10-10 33 views
0

我該如何顯示只顯示保存在'name'和'email中的變量使用$ _SESSION(意味着不使用$ _COOKIE)?

我創建了使用$ _COOKIE工作的程序,但是(我知道)它的設計不是很好。我只是在學習。但我試圖轉換一個表單收集數據使用$ _SESSION而不是$ _COOKIE。我所做的只是用$ _SESSION(更少的setcookie等)替換$ _COOKIE。我的目標是,如果你點擊「記住我」,它會記住你的'姓名'和'電子郵件',這樣你就可以直接點擊「鏈接」重新打開瀏覽器下載內容。

<?php 
session_start(); 
    // session 
    if (isset($_POST['remember'])) { 
$customer_name = $_SESSION['name']; 
if (!($customer_name)) { 
$customer_name = $_POST['name']; 
} 
$customer_email = $_SESSION['email']; 
if (!($customer_email)) { 
$customer_email = $_POST['email']; 
} 

//If Form submitted 
//I.e. Email validation that will check if field is empty or doesn't 
//If there is no error 
echo 'Here's the <a href="http://www.google.com/something">link.<br />'; 
//else there's error 

<form name="form1" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 
Name: 
<?php 
    if (isset($_SESSION['name'])) { 
    echo $_SESSION['name']."<br />"; 
    } 
else { 
?> 
<input type="text" name="name" value="<?php echo $_POST['name']; ?>" size="25" /><br /> 
<?php } ?> 

Email: 
<?php 
    if (isset($_SESSION['email'])) { 
    echo $_SESSION['email']."<br /><br />"; 
    } 
else { 
?> 
<input type="text" name="email" value="<?php echo $_POST['email']; ?>" size="25"/> 
<input type="checkbox" name="remember" /> Remember me 
<input type="submit" name="Submit" /> 
<?php } ?> 


</form> 
+1

會話通常是臨時的,cookies允許您設置遠期到期的日期。 – Barmar

+0

什麼問題? –

+0

@Barmar $ _SESSION和$ _COOKIE是一樣的,只有在客戶端保存的數據是前者的「標記」,但後者是被收集變量的實際內容(即$ _COOKIE ['name'] =「john 「這是保存在客戶端的瀏覽器)。 – mythoslife

回答

0

改爲使用cookie。例如,用電子郵件設置一個cookie,它會被記住直到cookie過期。如果使用會話,它將取決於服務器配置,但通常很低(不到一天)。

無論如何,我沒有看到任何問題都在這裏:P

+0

是的,我現在做了,我需要做$ _SESSION。 – mythoslife

+0

但餅乾是'記住我'的正確方法,會話不是 – 2013-10-10 22:37:15

+0

@Dagon我試圖使用我爲$ _COOKIE所做的概念將其轉換爲$ _SESSION,並且可以使它以這種方式工作。兩者之間的區別在於$ _SESSION將一個令牌保存在客戶端瀏覽器(其餘的服務器上),但$ _COOKIE實際上保存了「內容」(即John,[email protected])。 – mythoslife

0

試試這個:

if (isset($_POST['remember'])) { 
    if (!isset($_SESSION['name'])) { 
     $_SESSION['name'] = $_POST['name']; 
    } 
    if (!isset($_SESSION['email'])) { 
     $_SESSION['email'] = $_POST['email']; 
    } 
    $customer_name = $_SESSION['name']; 
    $customer_email = $_SESSION['email']; 
    ... 

在代碼中,你設置$customer_XXX,但從來沒有設置$_SESSION['XXX']

+0

這兩個是錯別字:$ _SESSION ['name'] = $ customer_name; $ _SESSION ['email'] = $ customer_email; – mythoslife

+0

根據您更新的代碼提供新答案。 – Barmar