2017-04-25 86 views
-3

所以我試圖創建一個登錄系統,並且我測試了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>"; 
?> 
+1

http://php.net/manual/en/function.error-reporting.php,如果你碰巧使用的是mysql數據庫;確保你沒有使用'mysql_',因爲php 7不再支持它。 –

+0

一些注意事項:1.密碼不屬於會話內部,永遠不會。 2.以這種方式混合HTML和PHP是非常古老的學校,並不是很好。你應該看看像Twig這樣的模板,並創建一個類似Slim或Laravel的基於路線的MVC-ish模式。 3.如果密碼是在index.php中設置的,看起來你正在註銷自己,這可以解釋爲什麼你總是最終註銷到底部。 session_destroy()使會話失效。 – nickdnk

+2

這就是很多「額外」的代碼來啓動一個會話 – nogad

回答

1

$secure = true; 

只能在使用TLS/HTTPS時使用。否則,它會使cookie無法工作。

-1

您必須在php代碼的第一行實現session_start函數。

相關問題