所以我試圖創建一個登錄系統,並且我測試了login.php正確地獲取了POST數據,我可以將它打印出來。但是我創建的應該返回到index.php並找到會話變量'password'並且不是空的,但它總是會再次打印登錄頁面。爲什麼我不能訪問我的會話變量?爲什麼我不能在PHP 7中訪問我的會話變量?
我functions.php文件:
<?php
function sec_session_start() {
$session_name = 'quassist_session';
session_name($session_name);
$secure = true;
$httponly = true;
if (ini_set('session.use_only_cookies', 1) === FALSE) {
header("Location: ../error.php?err=Could not initiate a safe session (ini_set)");
exit();
}
$cookieParams = session_get_cookie_params();
session_set_cookie_params($cookieParams["lifetime"], $cookieParams["path"], $cookieParams["domain"], $secure, $httponly);
session_start();
session_regenerate_id(true);
}
function sec_session_logout() {
$_SESSION = array();
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]);
session_destroy();
}
?>
我的login.php文件:
<?php
include_once 'functions.php';
sec_session_start();
$_SESSION['username'] = $_POST['formuser'];
$_SESSION['password'] = $_POST['formpass'];
header("Location: index.php"); /* Redirect browser */
exit();
?>
我的index.php文件:
<?php
include_once("functions.php");
sec_session_start();
echo "<html>";
echo "<head>";
echo "<title>Login</title>";
echo "<link rel='stylesheet' href='style.css'>";
echo "</head>";
echo "<body>";
if(isset($_SESSION['password']) && !empty($_SESSION['password'])) {
// user entered password
echo $_SESSION['username'] . "<br>" . $_SESSION['password'];
// logout
// sec_session_logout();
} else {
echo "<div class='login-page'>";
echo "<div class='form'>";
echo "<form class='login-form' action='http://www.quassist.com/login.php' method='post'/>";
echo "<input name='formuser' type='text' placeholder='username'/>";
echo "<input name='formpass' type='password' placeholder='password'/>";
echo "<button type='submit' value='Submit'>login</button>";
echo "</form>";
echo "</div>";
echo "</div>";
}
echo "</body>";
echo "</html>";
?>
http://php.net/manual/en/function.error-reporting.php,如果你碰巧使用的是mysql數據庫;確保你沒有使用'mysql_',因爲php 7不再支持它。 –
一些注意事項:1.密碼不屬於會話內部,永遠不會。 2.以這種方式混合HTML和PHP是非常古老的學校,並不是很好。你應該看看像Twig這樣的模板,並創建一個類似Slim或Laravel的基於路線的MVC-ish模式。 3.如果密碼是在index.php中設置的,看起來你正在註銷自己,這可以解釋爲什麼你總是最終註銷到底部。 session_destroy()使會話失效。 – nickdnk
這就是很多「額外」的代碼來啓動一個會話 – nogad