我有以下问题,会话不保留信息。 所以我可能犯了很多错误,但我不知道为什么, 如果你看到其他什么是无用/缺失的,你能说出来吗? 这是一个登录脚本。
我认为这很好,直到我在其他页面(home.php)中看到它找不到会话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>";
}
}
?>
// dbconnect.php
<?php
$connect = mysql_connect( 'localhost', 'root', 'root' );
mysql_select_db('applicatie', $connect);
?>
// error.php
<?php
ini_set('display_errors',1);
error_reporting(E_ALL);
?>
更新。 我不能再登录,因为会话不再是真的:/
答案 0 :(得分:1)
试试这个
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 );
}
我希望这会有所帮助
谢谢
答案 1 :(得分:0)
记住session_start();需要在所有使用会话的页面上。 最好将其写在头文件中,并将其包含在每个页面上。
此外,您的会话变量名为userername,small typo
答案 2 :(得分:0)
如果使用header("Location...")
重定向脚本,PHP无法编写会话。据我所知,这也只会在您重定向到同一服务器上的脚本时发生(有人可以确认吗?)。
....
$_SESSION['userername'] = $username;
session_write_close();
header("Location: home.php");
exit;
答案 3 :(得分:0)
尝试将session_start()放在第一行,如下所示
<?php
session_start();
error_reporting(E_ALL ^ E_NOTICE);
ini_set( 'display_errors', '0' );