【问题标题】:Setting Sessions inside PHP Class在 PHP 类中设置会话
【发布时间】:2012-12-21 17:32:12
【问题描述】:

我正在创建一个用户类来处理我的登录。由于我希望在验证用户名和密码后在类内设置会话,我是否必须在类的顶部使用 session_start() ,在要设置会话的公共函数内,或者实例在哪里创建?也许它可以进入函数_construct()?

我想这样称呼这个类:

<php

include('user_class.php');
$user = new user;
$user->login($username,$password);


?>

【问题讨论】:

  • @Supericy 感谢您的回复。是否可以在私有函数中设置会话设置,如果 user->login(...) 返回 TRUE,则调用该函数?还是您认为最好使用公共函数手动调用会话设置函数?

标签: php class session


【解决方案1】:

你可以添加 session_start();在您要包含该类的文件的顶部。

所以

<?php
  session_start();
  include('user_class.php');
  $user = new user;
  $user->login($username,$password);
?>

会起作用的。

【讨论】:

  • 感谢您的回复。如果我按照您的建议使用 session_start() ,我可以在课堂上正常使用 "SESSION['x'] = $x" 吗?另外,有没有办法 session_start() 可以包含在类中,所以我不必在使用类时初始化它?
【解决方案2】:

在您的用户类旁边也为您自己创建一个会话类。

然后用户类只是将自己存储到会话类中,不需要关心是否调用session_start,这是会话类的工作。

<php

include('session_class.php');
include('user_class.php');


$session = new session;

if ($session->hasRegisteredUser()) {
    $user = $session->getRegisteredUser();
} else {
    $user = new user;        
    $user->login($username, $password);
    $session->setRegisteredUser($user);
}

这是否回答了您的问题,还是您现在需要知道如何使用会话类来解决问题?

【讨论】:

  • 感谢您提供帮助 hakre。在用户类中调用 session_start() 不是最简单的吗?如果没有,您能否解释一下有关使用会话类的更多信息。你有什么例子吗?
  • @Sam:不。想象一下,您需要同时拥有更多用户类。他们都开始一个会话?相反,您需要一些会话,您可以将一些东西存储到其中并取回它。将这些东西分开更简单,只需在开始时编写更多代码,您很快就会发现随着用户对象的增长,这会更好。 - 两个对象是相关的 - 但不相同。所以他们应该成为亲密的朋友,但不要把他们放在一起。
  • 要查看会话是否已经开始,这里有一个有用的函数:php.net/session_status
  • 所以,一旦我的用户类检查了用户名和密码是否正确,它就可以返回一个数组,其中包含我在会话中需要的所有数据(即用户名、ID、名称)到 session_class 对象哪个将为我设置会话?这现在开始变得有意义了。理论上,session_class不能只是我包含的一个函数吗?
  • 更好的是,您的用户对象本身会保留它的数据。你只需将用户对象传递给会话并在那里注册它。因此,会话知道是否/如果没有用户注册它。例如,如果会话没有用户,您可以显示登录表单的链接,但如果有,则显示注销表单的链接。 - 所以从技术上讲,用户对象可以知道它是否已登录,会话对象只负责将用户对象序列化并将其存储到会话中。
【解决方案3】:

是的,您可以在类中使用会话,因为会话是 php 中的全局变量。

代码示例(添加新的会话变量):

<?php
    class sessionControle{
        ...
        ...
        public function addSession($index, $value){
            $_SESSION[$index] = $value;
            return $_SESSION[$index];
        }
    }
?>

在您的主 php 文件中,您可以包含函数 $_SESSIONS are global 主文件中的代码:

<?php
    session_start();
    include_once("myClass.php");
    $Se = new sessionControle;
    echo $Se->addSession('User', 'Crx');

    //Double check here !!
    echo $_SESSION['User'];
?>

输出:Crx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-13
    • 1970-01-01
    • 2013-10-18
    • 2016-04-08
    • 1970-01-01
    • 2017-07-08
    • 2015-01-14
    • 2015-11-30
    相关资源
    最近更新 更多