[英]Can't retrieve cookies in PHP
在成功的登錄功能中,我具有以下代碼:
setcookie('username', $username, time()+60*60*24*365);
setcookie('password', $clean_pw, time()+60*60*24*365);
其中$username
和$clean_pw
是純文本登錄信息。
在測試頁中,我嘗試這樣做:
foreach ($_COOKIE as $key=>$val)
{
echo $key.' is '.$val."<br>\n";
}
並得到結果:
PHPSESSID is 823fc1084766daba506cffc3654e1e23
_gat is 1
_ga is GA1.2.1524905679.1454061204
為什么找不到我的登錄Cookie?
編輯:還可以,cookie 是在瀏覽器中的cookies名單。 看來他們不在$_COOKIE
首先,永遠不要將用戶名或密碼設置為cookie。 這是非常糟糕的做法,因為cookie可以讀取任何內容。 Cookie應該用於“記住我”檢查之類的操作,並使用會話(仍然不包含用戶名或密碼)來驗證用戶身份。
這樣一來,回答您的問題,您將不會看到剛剛設置的cookie,直到您轉到下一頁(或刷新)為止。
另外,您可能還需要考慮使用dateTime()類在日期設置中使用,並為cookie設置路徑和域,如下所示:
setcookie(name,value,expire,path,domain,secure,httponly);
需要使用setcookie()
創建一個$_COOKIE
:
setcookie(name, value, expire, path, domain, secure, httponly);
有關$_COOKIE
更多信息, 請訪問http://www.w3schools.com/php/php_cookies.asp 。
您可以改用PHP會話來提高安全性。
首先,設置$_SESSION
:
session_start();
$_SESSION['logged_in'] = true;
header("Location: login.php");
要確定用戶是否已登錄,可以檢查會話(如果未設置),然后將用戶重定向回登錄頁面。
<?php
session_start();
if(!$_SESSION['logged_in']){
session_destroy();
header("Location: login.php");
}
?>
要注銷,請銷毀會話。
<?php
session_start();
$_SESSION['logged_in'] = 0;
session_destroy();
header("Location: login.php");
?>
提示,您應該加密用戶的用戶名和密碼。
另外,切勿將密碼存儲在cookie或會話中,因為一開始就沒有用。 這是在用戶登錄時僅存儲true
的一種更好,更安全的方法。
希望這可以幫助!
嘗試使用“路徑”設置cookie。
的setcookie(名稱,值,過期,路徑,域,安全,僅Http);
喜歡
setcookie('username', $username, time()+60*60*24*365, '/');
setcookie('password', $clean_pw, time()+60*60*24*365, '/');
這將指定該域上的所有文件路徑。
您可以使用會話代替Cookie,這可能對您有所幫助
$_SESSION["name"] = "andy";
$_SESSION["pass"] = "00000";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.