2014-04-28 114 views
0

**更新 - 解決問題**我的代碼是正確的,除了我需要指定目錄。設置cookie的文件位於子域中,因此跳過了根目錄。我更改了代碼以設置Cookie,如下所示:Cookie未被設置 - PHP

setcookie('Remember','remembercheck',time()+3600,'/','.mydomain.com'); 

現在它已正確設置。

**完**更新

當我嘗試登錄不檢查記得我按鈕,cookie不會被設置,我沒有被記錄下來。如果我登錄與記得我按鈕檢查,它的日誌很好。有任何想法嗎?我很難過!

PHP:

<?php 

require 'connect.php'; 
require 'functions.php'; 

session_name('login'); 

session_start(); 

// ---------- LOGIN ---------- 

if($_POST['submit']=='Login') 
{ 
    // Checking whether the Login form has been submitted 

    $err = array(); 
    // Will hold our errors 


    if(!$_POST['username'] || !$_POST['password']) 
     $err[] = 'All the fields must be filled in!'; 

    if(!count($err)) 
    { 
     $_POST['username'] = mysql_real_escape_string($_POST['username']); 
     $_POST['password'] = mysql_real_escape_string($_POST['password']); 
     $_POST['remembercheck'] = (int)$_POST['remembercheck']; 

     $storedsaltquery = mysql_fetch_assoc(mysql_query("SELECT rand FROM membertable WHERE usr = '".$_POST['username']."'")); 
     $storedsalt = $storedsaltquery['rand']; 

     // Escaping all input data 

     $row = mysql_fetch_assoc(mysql_query("SELECT id,usr, FROM membertable WHERE usr='{$_POST['username']}' AND pass='{$_POST['password']}'")); 

     if($row['id']) 
     { 
      // If everything is OK login 

      $_SESSION['usr']=$row['usr']; 
      $_SESSION['id'] = $row['id']; 
      $_SESSION['remembercheck'] = $_POST['remembercheck']; 

      // Store some data in the session 

      setcookie("Remember","remembercheck"); 

     } 
     else $err[]='Wrong username and/or password!'; 
    } 

    if($err) 
    $_SESSION['msg']['login-err'] = implode('<br />',$err); 
    // Save the error messages in the session 

    echo header("Location: ../index.php"); 
    exit; 
} 

HTML:

<?php 

require 'includes/connect.php'; 
require 'includes/functions.php'; 

session_name('crmLogin'); 
// Starting the session 

session_start(); 

if($_SESSION['id'] && !isset($_COOKIE['Remember']) && !$_SESSION['remembercheck']) 

{ 
    // If you are logged in, but you don't have the Remember cookie (browser restart) 
    // and you have not checked the remembercheck checkbox: 

    $_SESSION = array(); 
    session_destroy(); 

    // Destroy the session 
} 


if(isset($_GET['logoff'])) 
{ 
    $_SESSION = array(); 
    session_destroy(); 

    header("Location: index.php"); 
    exit; 
} 
?> 

    <form name="login" action="includes/logincheck.php" method="post"> 

       Username: <input type="text" name="username" id="username" /><br> 
       Password: <input type="password" name="password" id="password" /><br> 
       <input name="remembercheck" id="remembercheck" type="checkbox" checked="checked" value="1" />&nbsp;&nbsp;Remember Me&nbsp;&nbsp; 
       <input type="submit" value="Login" name="submit"/><br><br><br> 
    </form> 
+1

哪個瀏覽器(S)?您是否使用開發人員工具或Fiddler觀看過Set-Cookie標頭?您的代碼是在頂層頁面還是在框架中運行? – EricLaw

回答

0

使用setcookie功能,我們應該設定一個到期時間

請看說明:

布爾SETCO okie(string $ name [,string $ value [,int $ expire = 0 [,string $ path [,string $ domain [,bool $ secure = false [,bool $ httponly = false]]]]]])

到期

cookie過期的時間。這是一個Unix時間戳,因此自紀元以來秒數爲 。換句話說,你最有可能用time()函數加 這個加上你想要它到期的 之前的秒數。或者你可以使用mktime()。時間()+ 60 * 60 * 24 * 30將 設置cookie在30天內過期。如果設置爲0或省略,則 Cookie將在會話結束時過期(當瀏覽器 關閉時)。

所以,你應該這樣做:

setcookie("pfRemember","rememberPFcheck",time() + 3600) 

更看php.net