3

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

这就是我想调用类的方式:

<php

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


?>
4

3 回答 3

7

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

所以

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

会工作。

于 2013-01-07T22:34:53.977 回答
4

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

然后用户类只是将自己存储到会话类中,不需要关心是否调用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);
}

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

于 2013-01-07T22:39:18.950 回答
4

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

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

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

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

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

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

输出:Crx

于 2015-12-27T16:23:48.293 回答