好吧,我不知道我在做什么错。我过去也使用过SESSION变量而没有任何问题,但这次似乎没有用。
以下是我的protected_page.php中的代码(登录成功后用户重定向的页面)。
<?php if (login_check($mysqli) == true) : ?>
<p>Welcome <?php echo htmlentities($_SESSION['username']); ?>!</p>
<p>
This is an example protected page. To access this page, users
must be logged in. At some stage, we'll also check the role of
the user, so pages will be able to determine the type of user
authorised to access the page.
</br></br>
<a href="add/home.php">Add new user!</a>
</p>
<p>Logout & return to <a href="includes/logout.php">login page</a></p>
<?php else : ?>
<p>
<span class="error">You are not authorized to access this page.</span> Please <a href="includes/logout.php">login</a>.
</p>
<?php endif; ?>
函数login_check()检查天气用户是否使用正确的凭据正确登录。如果是,则返回true。
还有另一个功能,即登录过程中调用的login(),并将凭据与输入的凭据进行匹配。如果为true,则会存储用户名&#39;在$ _SESSION变量中。
点击&#34;添加新用户!&#34;它发送给我添加/ home.php页面,但是有o $ _SESSION变量。
if (login_check($mysqli) == true) : ?>
<p>Welcome <?php echo htmlentities($_SESSION['username']); ?>!</p>
<h1>Add user!</h1>
<?php
if (!empty($error_msg)) {
echo $error_msg;
}
?>
<ul>
<li>Emails must have a valid email format</li>
</ul>
<form action="<?php echo esc_url($_SERVER['PHP_SELF']); ?>"
method="post"
name="registration_form">
Full Name: <input type='text'
name='fullname'
id='fullname' /><br>
Email: <input type="text" name="email" id="email" /><br>
Project Name: <input type="text"
name="project"
id="project"/><br>
Phone Number: <input type="text"
name="phone"
id="phone" /><br>
<input type="submit"
value="Submit" />
</form>
<p>Logout & return to <a href="../includes/logout.php">login page</a></p>
<?php else : echo "7"; ?>
<p>
<span class="error">You are not authorized to access this page.</span> Please <a href="../includes/logout.php">login</a>.
</p>
<?php endif; ?>
它始终打印我没有足够的凭据来查看此页面。
我还在两个页面上引入了sec_session_start()函数。 (protected_page.php&amp; add / home.php)。 sec_session_start()是用户定义的自定义会话启动函数。
function sec_session_start() {
$session_name = 'sec_session_id'; // Set a custom session name
$secure = SECURE;
// This stops JavaScript being able to access the session id.
$httponly = true;
// Forces sessions to only use cookies.
if (ini_set('session.use_only_cookies', 1) === FALSE) {
header("Location: ../error.php?err=Could not initiate a safe session (ini_set)");
exit();
}
// Gets current cookies params.
$cookieParams = session_get_cookie_params();
session_set_cookie_params($cookieParams["lifetime"],
$cookieParams["path"],
$cookieParams["domain"],
$secure,
$httponly);
// Sets the session name to the one set above.
session_name($session_name);
session_start(); // Start the PHP session
session_regenerate_id(); // regenerated the session, delete the old one.
}
这次我不知道自己做错了什么。一定是个愚蠢的错误。提前致谢。 :)
如有任何进一步的细节,请告知我。
答案 0 :(得分:0)
您需要在页面顶部的所有.php页面上安装session_start()。
确保拥有它。即使你在一个函数中有它,它可能会把它放到底部太远。
你有这个:
session_name($session_name);
session_start(); // Start the PHP session
session_regenerate_id(); // regenerated the session, delete the old one.
您需要将session_start作为页面上的第一件事。确保功能 不会离页面顶部太远。