簡體   English   中英

會話 PHP

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM