[英]Sessions for PHP
我有以下問題,session 不保留信息。 所以可能我犯了很多錯誤,但我不知道為什么,如果你看到任何其他無用/遺漏的東西,你能說出來嗎? 這是一個登錄腳本。
我認為這很好,直到我在我的另一個頁面 (home.php) 中看到它找不到 session id。
我是 PHP 的新手,但如果有人能提供幫助那就太好了:)這是代碼,
<?php
error_reporting(E_ALL ^ E_NOTICE);
ini_set( 'display_errors', '0' );
session_start();
include ('db_connect.php');
include("error.php");
if($_SERVER['REQUEST_METHOD'] == "POST")
{
//formulier verstuurd
$username = $_POST['username'];
$password = $_POST['password'];
//protect MySQL Injection
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);
$query = mysql_query("SELECT * FROM inlog WHERE username = '$username' AND password = '$password' ") or die(mysql_error());
$rows = mysql_num_rows($query);
if($rows == 1) {
$_SESSION['userername'] = $username;
header("location:home.php");
}
else
{
$wronguser = "<div id='wronguser'>*Verkeerd gebruikersnaam of wachtwoord</div>";
}
}
?>
//數據庫連接.php
<?php
$connect = mysql_connect( 'localhost', 'root', 'root' );
mysql_select_db('applicatie', $connect);
?>
//錯誤.php
<?php
ini_set('display_errors',1);
error_reporting(E_ALL);
?>
更新。 我不能再登錄了,因為 session 不再是真的了:/
試試這個
error_reporting ( E_ALL ^ E_NOTICE );
ini_set ( 'display_errors', '0' );
session_start ();
include ('db_connect.php');
include ("error.php");
/**
* Check Login
*/
if (isset ( $_POST ['username'] ) && isset ( $_POST ['password'] )) {
$username = $_POST ['username'];
$password = $_POST ['password'];
// protect MySQL Injection
$username = mysql_real_escape_string ( $username );
$password = mysql_real_escape_string ( $password );
$query = mysql_query ( "SELECT * FROM inlog WHERE username = '$username' AND password = '$password' " ) or die ( mysql_error () );
$rows = mysql_num_rows ( $query );
if ($rows == 1) {
$_SESSION ['userername'] = $username;
$_SESSION ['auth'] = true;
header ( "location:home.php" );
}
else
{
$_SESSION ['userername'] = false;
$_SESSION ['auth'] = false;
}
}
/**
* Logout
*/
if (@$_GET ['cmd'] == "logout") {
$_SESSION = array ();
}
/**
* Error Output
*/
if (! $_SESSION ['auth'] || ! $_SESSION ['userername']) {
$wronguser = "<div id='wronguser'>*Verkeerd gebruikersnaam of wachtwoord</div>";
die ( $wronguser );
}
我希望這有幫助
謝謝
請記住 session_start(); 需要在使用會話的所有頁面上。 最好將其寫在 header 文件中,並將其包含在每一頁中。
您的 session 變量也被命名為用戶名,小錯字
如果您使用header("Location...")
重定向腳本,則 PHP 無法寫入 session。 據我所知,這也只會在您重定向到同一服務器上的腳本時發生(有人可以確認這一點嗎?)。
您需要使用session_write_close()
明確關閉 session :
....
$_SESSION['userername'] = $username;
session_write_close();
header("Location: home.php");
exit;
嘗試將 session_start() 放在第一行,如下所示
<?php
session_start();
error_reporting(E_ALL ^ E_NOTICE);
ini_set( 'display_errors', '0' );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.