php。尝试访问 $_SESSION 变量会导致索引错误
Posted
技术标签:
【中文标题】php。尝试访问 $_SESSION 变量会导致索引错误【英文标题】:php. Trying to access $_SESSION variables gives index error 【发布时间】:2017-05-05 23:30:15 【问题描述】:尝试访问 $_SESSION['key'] 时出现索引错误。
我需要检查 $_SESSION['loggedin'] 是否设置为 true 以显示登录/注销按钮。
//GENERAL IDEA
if( $_SESSION['loggedin'] == true )
//log out
else
//log in
但它总是执行 else 并显示登录按钮。
过了一会儿,我尝试回显 $_SESSIONS['loggedin'] 值,但出现索引错误。检查 $_SESSION 上的 isset() 会返回 false。
所以我认为问题在于我的 $_SESSION['loggedin'] 没有像我想的那样工作。
我有:
session_start() 在我的文件顶部。
.php 我所有文件的扩展名。
如果成功登录,
login.php 会创建 $_SESSION['loggedin']。(我知道我已成功登录,因为我被重定向了。)
if( $_POST['username'] == "myUSER" && $_POST['password'] == "myPASSWORD" )
$_SESSION['loggedin'] == true;
header( "location: ../main/home.php" );
exit;
else
$bad_login == true;
Authentication.php loggedin() 类函数检查 $_SESSION['loggedin'] isset 和 true 是否返回 true
public static function loggedin()
return ( isset( $_SESSION['loggedin'] ) && $_SESSION['loggedin'] == true );
_template.php 包含在页脚部分显示的按钮。 (我在这里复制了我的整个模板文件,因为我想指出我的 start_session() 位于我的 home.php 文件的顶部,但我认为这没有什么不同。或者如果整个文件被复制,也许更容易注意到我的错。)
<?php
$page_name = basename( $_SERVER['PHP_SELF']);
$page_name_parts = explode( '.', $page_name );
?>
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<title>Title</title>
<meta name="viewport" content="width=device-width">
</head>
<body>
<div class="container-fluid">
<header>
<h1 id="top">Heading</h1>
</header>
<?php
//Flash::show_flash();
require( $page_name_parts[0] . ".view.php" );
?>
<footer>
<!-- Login button -->
<?php require_once( "../lib/Authentication.php" ); ?>
<?php if( Authentication::loggedin() ): ?>
<a href=" ../authentication/logout.php"><button class="btn1">Logout</button></a>
<?php else : ?>
<a href=" ../authentication/login.php"><button class="btn1">Login</button></a>
<?php endif ?>
<!-- Scroll TOP -->
<a href="#top"><span></span>Top</a>
</footer>
</div>
</body>
</html>
【问题讨论】:
未设置$_SESSION['loggedin']
时会发生这种情况。你应该做的是检查索引是否 isset if(isset($_SESSION['loggedin']) && $_SESSION['loggedin']) //you are logged in else //not logged in
【参考方案1】:
你不设置$_SESSION['loggedin']
,你测试它是否为真。将==
更改为=
。
【讨论】:
if($_SESSION['loggedin'] = true)
永远为真。【参考方案2】:
我的文件顶部确实有 session_start()。
但我在您发布的任何代码中都看不到它。
你的方法也有缺陷。
是的,您的登录页面可能正在设置值并保存它,但随后没有被读取。您应该首先查看您的错误报告/日志记录,以确保您没有收到headers already sent 警告。
然后检查您的 HTTP 请求和响应标头,以确保您的浏览器发送回登录页面中使用的相同会话 cookie 值。您可能遇到 cookie 路径问题。
这涵盖了 99% 的情况 - 但如果您正确复制了代码,那么您的问题就在这里:
if( $_POST['username'] == "myUSER" && $_POST['password'] == "myPASSWORD" )
$_SESSION['loggedin'] == true;
您没有在登录时设置值 - '==' 是比较而不是赋值。
【讨论】:
【参考方案3】:session_start();
http://www.w3schools.com/php/php_sessions.asp 这是一个关于它如何工作的链接
【讨论】:
以上是关于php。尝试访问 $_SESSION 变量会导致索引错误的主要内容,如果未能解决你的问题,请参考以下文章
从不同端口上的 AJAX 访问时,$_SESSION 变量为空 [重复]
PHP session_set_cookie_params 中断 php session_start() 函数和 $_SESSION 变量