[英]Php session: undefined index
我閱讀了許多其他有關此的主題,但仍無法弄清我的問題。 它正在運行,然后我的計算機崩潰了,現在看來它不再存儲會話變量了。 這是我的代碼
登錄頁面,我在其中創建會話(如果用戶已通過身份驗證)
<?php session_start();
if(!empty($_POST['subject'])) //SPAM
exit;
include "functions.php";
$con=Connection();
$usr = mysqli_fetch_array(mysqli_query($con, "SELECT usrname, usrpw FROM users"));
if(password_verify($_POST['usrname'], $usr[0]) && password_verify($_POST['usrpw'], $usr[1])){
session_regenerate_id(true);
echo "crea session";
$_SESSION['logged'] = hash('sha256', 'L9oT8s5iF3yX1uW');
$_SESSION['remote_ip'] = $_SERVER['REMOTE_ADDR'];
$_SESSION['year'] = date('Y');
echo "<h12>welcome!<br/><br/>";
echo"<a href='home.php'>Home</a></h12>";
}else{
session_destroy();
echo "<h12wrong data.<br/></br>";
echo"<a href='login1.php'>try again</a></h12>";
}
mysqli_close($con); ?>
<html>
<head>
<title> Login </title>
<link type="text/css" rel="stylesheet" href="css/styles.css" title="Style" media="all" />
</head>
</html>
這些是登錄(並創建會話變量)后在“主頁”頁面中的第一行代碼。 其他行是html,所以我省略了。
<?php session_start();
if(!isset($_SESSION['logged']) && $_SESSION['logged'] != 1)){
echo "not logged ".$_SESSION['logged'];
exit;
}
?>
登錄頁面可以正常工作(它會進入if stat。,因為它將打印“創建會話”字符串),但是一旦我轉到主頁,它就會拋出此錯誤:注意:未定義索引:在第2行記錄(我正在檢查會話變量是否已設置)。 我嘗試注釋掉除“已記錄”之外的所有會話變量,但仍然無法解決。
謝謝
編輯:對不起,關於括號,我在這里寫了一個錯誤(我更改了數字1所擁有的字符串,但是我忘記了刪除括號)。 還是行不通。
我嘗試了此操作,但仍然拋出錯誤(實際上,“未登錄”后,回顯將不會打印任何內容)
if(!isset($_SESSION['logged'])){
echo "not logged ".$_SESSION['logged'];
exit;
}
編輯2:我刪除了home.php中的所有代碼,並使其如下所示:
<?php session_start();
echo $_SESSION['logged'];
?>
它仍然會告訴我未定義“記錄”索引
我認為,您的意思是if(!isset($ _ SESSION ['logged'])|| $ _SESSION ['logged']!= 1))(第一個檢查會話變量是否存在,下一個檢查值)
使用isset時,我通常會采用其他方法,以便將來更好地閱讀我的邏輯:
讓我們制動一下,這意味着已使用的已登錄:
isset($_SESSION['logged']) && $_SESSION['logged'] == 1
然后我把整個東西包起來! 使該語句僅在用戶未登錄時才起作用:
!(isset($_SESSION['logged']) && $_SESSION['logged'] == 1)
請記住,您必須添加括號,否則! 只會反轉isset,而不是整個。
以上所有內容,如果您確實想采用這種方式,但老實說,最好在您的情況下使用empty:
if (empty($_SESSION['logged']))
這將檢查thingy是否已設置,然后它是否不能評估為布爾值false-如果您的情況是1不為空,而0或''是,那么它將像魅力一樣工作。
因為如果不存在,則不能等於1,因此必須使用或(||)
<?php session_start();
if(!isset($_SESSION['logged']) || $_SESSION['logged'] != 1){
echo "not logged ".$_SESSION['logged'];
exit;
}
?>
試試這個將對您有幫助:
)
||
不是&&
使用適當的條件
if(!isset($_SESSION['logged']) || $_SESSION['logged'] != 1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.