尝试访问$ _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 包含页脚部分中的按钮显示。 (我在这里复制了我的整个模板文件bc我想指出我的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>
答案 0 :(得分:0)
你没有设置$_SESSION['loggedin']
,你测试它是否属实。将==
更改为=
。
答案 1 :(得分:-1)
我的文件顶部有session_start()。
但是我无法在您发布的任何代码中看到它。
你的方法也有缺陷。
是的,您的登录页面可能正在设置值并将其保存,但随后无法读取。您应该首先查看错误报告/日志记录,以确保您没有收到headers already sent警告。
然后检查您的HTTP请求和响应标头,以确保您的浏览器发送回登录页面中使用的相同会话cookie值。您可能遇到cookie路径问题。
这涵盖了99%的案例 - 但如果您已正确复制代码,那么您的问题就在这里:
if( $_POST['username'] == "myUSER" && $_POST['password'] == "myPASSWORD" ){
$_SESSION['loggedin'] == true;
您没有在登录时设置值 - &#39; ==&#39;是比较而非作业。
答案 2 :(得分:-1)
session_start();
http://www.w3schools.com/php/php_sessions.asp 这是一个如何运作的链接