为了账号安全,请及时绑定邮箱和手机立即绑定

PHP 会话登录控制器

PHP 会话登录控制器

PHP
largeQ 2021-12-03 16:16:30
我正在尝试为我的网站创建一个登录控制器......在保持人们登录方面我决定使用会话。我目前正在尝试创建一个可以在我包含会话的控制器文件时引用的类。这将允许我创建、验证(删除)和更新会话。<?phpclass Session {    static function start($name, $value) {        session_start();        $_SESSION[$name] = $value;        $_SESSION['EXPIRE'] = time() + 10;    }    // checking for expire    static function auth() {        if (isset($_SESSION['EXPIRE']) && $_SESSION['EXPIRE'] < time()) {            $_SESSION = array();            session_destroy();        }    }    static function update($time = 20) {        if (isset($_SESSION['EXPIRE'])) {            $_SESSION['EXPIRE'] = time() + $time;            session_regenerate_id(false);        }    }}目前它没有正确设置会话。当我尝试在设置它们后调用页面上的会话时,它无法正确获取。会话在我调用它之前不会过期,因为我从未在文档的类中调用使它过期的函数。
查看完整描述

2 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

您无法调用您的Session类,因为您需要包含它,session_start()并且您只能在start方法中使用它。


选项 1:您必须session_start()在要处理会话的每个页面中调用


选项 2:向您的类添加一个函数并在您class创建后调用它并添加到那里,session_start()以便在您包含会话类的任何地方session_start都已经被初始化


例子:


会话文件


class Session {


    static function init(){

         session_start();

    }

    //rest of your methods...

}


//initialize it

Session::init();


使用 session.php 的页面


include('Sessions.php');

Session::update();


查看完整回答
反对 回复 2021-12-03
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

更好地在 php.ini 或 ini_set() 函数中设置 php 会话超时变量,不要创建自己的 $_SESSION['expire'] 变量;您可以在每次用户发送请求时重新生成_session_id();更好地在会话中测试用户 IP 地址。在大多数项目中,您在服务器上只有一个页面或只有您自己的页面。


在会话中设置用户 ID:


$_SESSION['userid'] = $loggoed_id_from_db;

// and test

if((int)$_SESSION['userid'] == 0){

    header('Location: logout.php');

    exit;

}else{

    if(empty($_SESSION['ip'])){

        $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];

    }else{

        if($_SESSION['ip'] != $_SERVER['REMOTE_ADDR']){

           header('Location: logout.php');

           exit;

        }

    } 

}

而且可能你没有从课堂上开始上课!


查看完整回答
反对 回复 2021-12-03
  • 2 回答
  • 0 关注
  • 191 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信