【问题标题】:Sessions are not being saved会话未保存
【发布时间】:2012-09-06 02:04:34
【问题描述】:

我写了这个脚本。 它正在工作,但是当我离开页面或返回页面时,不会保存会话。我做错了什么?

login.php

<?php
session_start();
require 'classes.php';

//if user is not yet authorized
if ($_SESSION['user']->iduser == null) {
    $dbhandle = mysql_connect($hst, $usr, $pass);
    if (!$dbhandle) {
        die('Could not connect: ' . mysql_error());
    }
    $selected = mysql_select_db($dbName, $dbhandle)
            or die("Could not select the database");

    $result = mysql_query(" query ");
    $resultArray = mysql_fetch_array($result);
    $num_rows = mysql_num_rows($result); //count how many rows returned
    //if 0 rows returned, then login was failed
    if ($num_rows == 0) {
        die('Error! Access denied. Incorrect username or password.');
    } else { //if username and password match
        $_SESSION['user'] = new user();
        $_SESSION['user']->iduser = $resultArray{'iduser'};
        $_SESSION['user']->fname = $resultArray{'fname'};
        echo 'Dear ' . $_SESSION['user']->fname . ', you succesfully logged in!';
    }
    //if user is already logged in
} else {
    echo 'You already logged in!<br>Your email is: ';
}
?>

类用户

<?php
class user {
    public $iduser = null;
    public $fname = null;
    public $lname = null;
    public $email = null;
    public $password = null;
    public $permission = null;
}
?>

【问题讨论】:

标签: php session


【解决方案1】:

您需要在会话开始前“require (classes.php)”。

(简单的答案:))

原因:调用 session_start 时会话被解码。要正确反序列化对象,则必须已经定义了类。因此,您需要在 session_start 之前定义类 - 交换这两行应该可以做到。

http://php.net/manual/en/oop4.serialization.php

【讨论】:

  • 另一个问题 - 将会话放在课堂上怎么样?它在所有文件之间共享;因此所有文件都需要它?
  • 这是您对编程逻辑和流程的要求。永远不要写两次,但是写一个函数调用,一个包含或类似的规则是一个规则,但不是所有的页面都需要会话?所以我真的无法回答。注意:对每个页面进行解读可能会增加不必要的开销 - 因此,如果课程在会话中,请保持课程小而整洁。
  • 哦 - 只是一个警告,即使你不打算使用“用户”,你仍然需要在 session_start 之前声明类结构。否则,在重写会话时,另一个页面可能会搞砸。这可能有助于您的思考过程。
猜你喜欢
  • 2017-10-23
  • 1970-01-01
  • 1970-01-01
  • 2018-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多