猿问

PHP 会话登录控制器

我正在尝试为我的网站创建一个登录控制器......在保持人们登录方面我决定使用会话。


我目前正在尝试创建一个可以在我包含会话的控制器文件时引用的类。这将允许我创建、验证(删除)和更新会话。


<?php


class 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);

        }

    }

}

目前它没有正确设置会话。当我尝试在设置它们后调用页面上的会话时,它无法正确获取。


会话在我调用它之前不会过期,因为我从未在文档的类中调用使它过期的函数。


largeQ
浏览 192回答 2
2回答

互换的青春

您无法调用您的Session类,因为您需要包含它,session_start()并且您只能在start方法中使用它。选项 1:您必须session_start()在要处理会话的每个页面中调用选项 2:向您的类添加一个函数并在您class创建后调用它并添加到那里,session_start()以便在您包含会话类的任何地方session_start都已经被初始化例子:会话文件class Session {&nbsp; &nbsp; static function init(){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;session_start();&nbsp; &nbsp; }&nbsp; &nbsp; //rest of your methods...}//initialize itSession::init();使用 session.php 的页面include('Sessions.php');Session::update();

神不在的星期二

更好地在 php.ini 或 ini_set() 函数中设置 php 会话超时变量,不要创建自己的 $_SESSION['expire'] 变量;您可以在每次用户发送请求时重新生成_session_id();更好地在会话中测试用户 IP 地址。在大多数项目中,您在服务器上只有一个页面或只有您自己的页面。在会话中设置用户 ID:$_SESSION['userid'] = $loggoed_id_from_db;// and testif((int)$_SESSION['userid'] == 0){&nbsp; &nbsp; header('Location: logout.php');&nbsp; &nbsp; exit;}else{&nbsp; &nbsp; if(empty($_SESSION['ip'])){&nbsp; &nbsp; &nbsp; &nbsp; $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];&nbsp; &nbsp; }else{&nbsp; &nbsp; &nbsp; &nbsp; if($_SESSION['ip'] != $_SERVER['REMOTE_ADDR']){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;header('Location: logout.php');&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;exit;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp;}而且可能你没有从课堂上开始上课!
随时随地看视频慕课网APP
我要回答