在PHP类中设置会话

在PHP类中设置会话,php,class,session,Php,Class,Session,我正在创建一个用户类来处理我的登录。由于我希望在验证用户名和密码后在类内设置会话,我是否必须在类顶部、要设置会话的公共函数内或创建实例的位置使用session_start()?也许它可以放在函数_construct()中 我想这样称呼这个班: <php include('user_class.php'); $user = new user; $user->login($username,$password); ?> login($username,$password);

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

我想这样称呼这个班:

<php

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


?>
login($username,$password);
?>

您只需添加session_start();在文件的顶部,您将该类包含在其中

所以



将起作用。

在用户类旁边,也可以创建一个会话类

然后,用户类只是将自己存储到会话类中,不需要关心是否调用
session\u 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);
}
hasristereduser()){
$user=$session->getRegisteredUser();
}否则{
$user=新用户;
$user->login($username,$password);
$session->setRegisteredUser($user);
}

这是否回答了您的问题,或者您现在需要知道如何使用会话类吗?

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

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


输出:
Crx

谢谢您的回复。如果我按照您的建议使用session_start(),我可以在类中正常使用“session['x']=$x”吗?另外,会话_start()是否不可能包含在类中,这样我就不必在使用该类时初始化它?@Supericy感谢您的回复。如果user->login(…)返回TRUE,是否可以在私有函数中调用会话设置?或者您认为最好使用公共函数手动调用会话设置函数?感谢您提供的帮助。在用户类中调用session_start()不是最简单的吗?如果没有,请您进一步解释一下如何使用会话类。你有什么例子吗?@Sam:没有。想象一下,你一次想要更多的用户类。他们都开始了一个会议?相反,您需要一些会话,您可以将一些内容存储到其中并检索回来。将这些东西分开比较简单,只需在开始时多写一点代码,您很快就会发现,随着用户对象的增长,这会更好。-两个对象都是相关的,但并不相同。因此,他们应该成为亲密的朋友,但不要将他们放在一起。为了了解会话是否已经启动,这里有一个有用的函数:因此,一旦我的用户类检查用户名和密码是否正确,它可以返回一个数组,其中包含会话中所需的所有数据(即用户名、ID、名称)进入一个会话类对象,它将为我设置会话?这现在开始有意义了。理论上,session_类不能只是我包含的一个函数吗?更好的是,您的用户对象本身将保留它的数据。您只需将用户对象传递给会话并在其中注册它。这样,会话就知道是否有用户重新注册了它。例如,如果会话没有用户,您可以显示到登录表单的链接,但如果有,则显示到注销表单的链接。-因此,从技术上讲,用户对象可以知道它是否已登录,会话对象只负责序列化用户对象并将其存储到会话中。
<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);
}
<?php
    class sessionControle{
        ...
        ...
        public function addSession($index, $value){
            $_SESSION[$index] = $value;
            return $_SESSION[$index];
        }
    }
?>
<?php
    session_start();
    include_once("myClass.php");
    $Se = new sessionControle;
    echo $Se->addSession('User', 'Crx');

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