Php 从头开始的会话处理

Php 从头开始的会话处理,php,session,Php,Session,我想从头创建一个会话处理程序。我不想使用session\u set\u save\u处理程序。但是我在任何地方都找不到任何东西,我只是不知道从哪里开始。有人能给我指出正确的方向或解释一下最好的方法吗 谢谢!:) 调用会话时的操作 //启动会话并设置变量的 会话_start() $\会话['login']='yes' $\会话['someinfo']=$var //打电话的时候 会话_start() $var=$\会话['someinfo'] 我希望这有帮助 -kris在尝试构建自己的会话机制时,

我想从头创建一个会话处理程序。我不想使用
session\u set\u save\u处理程序
。但是我在任何地方都找不到任何东西,我只是不知道从哪里开始。有人能给我指出正确的方向或解释一下最好的方法吗


谢谢!:)

调用会话时的操作

//启动会话并设置变量的

会话_start()

$\会话['login']='yes'

$\会话['someinfo']=$var

//打电话的时候

会话_start()

$var=$\会话['someinfo']

我希望这有帮助


-kris

在尝试构建自己的会话机制时,没有什么需要注意的

您可以做的第一件事是编写一个PHP会话包装器。类,该类将封装PHP会话功能。因此,当您想要使用会话时,您可以实例化会话类并使用会话执行您想要的操作。您可以这样做:

class Session
    {
        /**
         * Starts new or resumes existing session
         * 
         * @access  public
         * @return  bool
         */

        public function start()
        {
            if(session_start()) {
                return true;
            }
            return false;
        }

        /**
         * End existing session, destroy, unset and delete session cookie
         * 
         * @access  public
         * @return  void
         */

        public function end()
        {
            if($this->status != true) {
                $this->start();
            }

            session_destroy();
            session_unset();
            setcookie(session_name(), null, 0, "/");
        }

        /**
         * Set new session item
         * 
         * @access  public
         * @param   mixed
         * @param   mixed
         * @return  mixed
         */

        public function set($key, $value)
        {           
            return $_SESSION[$key] = $value;
        }

        /**
         * Checks if session key is already set
         * 
         * @access  public
         * @param   mixed  - session key
         * @return  bool 
         */

        public function has($key)
        {
            if(isset($_SESSION[$key])) {
                return true;
            }

            return false;
        }   

        /**
         * Get session item
         * 
         * @access  public
         * @param   mixed
         * @return  mixed
         */

        public function get($key)
        {
            if(!isset($_SESSION[$key])) {
                return false;
            }

            return $_SESSION[$key];         
        }
    }
$session = new Session();
$session->start();
$session->set('id', 5);
echo $session->get('id);
然后您可以像这样使用此会话类:

class Session
    {
        /**
         * Starts new or resumes existing session
         * 
         * @access  public
         * @return  bool
         */

        public function start()
        {
            if(session_start()) {
                return true;
            }
            return false;
        }

        /**
         * End existing session, destroy, unset and delete session cookie
         * 
         * @access  public
         * @return  void
         */

        public function end()
        {
            if($this->status != true) {
                $this->start();
            }

            session_destroy();
            session_unset();
            setcookie(session_name(), null, 0, "/");
        }

        /**
         * Set new session item
         * 
         * @access  public
         * @param   mixed
         * @param   mixed
         * @return  mixed
         */

        public function set($key, $value)
        {           
            return $_SESSION[$key] = $value;
        }

        /**
         * Checks if session key is already set
         * 
         * @access  public
         * @param   mixed  - session key
         * @return  bool 
         */

        public function has($key)
        {
            if(isset($_SESSION[$key])) {
                return true;
            }

            return false;
        }   

        /**
         * Get session item
         * 
         * @access  public
         * @param   mixed
         * @return  mixed
         */

        public function get($key)
        {
            if(!isset($_SESSION[$key])) {
                return false;
            }

            return $_SESSION[$key];         
        }
    }
$session = new Session();
$session->start();
$session->set('id', 5);
echo $session->get('id);
我喜欢这样,因为我可以像对象一样使用PHP会话,而不必使用PHP函数。 但是请注意,您无论如何都在使用PHP函数,但在使用此类时却看不到它。这样做可以帮助您深入了解PHP会话的工作原理

如果您决定咬紧牙关,编写自己的会话机制,那么没有什么需要注意的。您需要决定的第一件事是将会话信息存储在哪里? 您可以将它们保存在数据库、文件系统、cookie等中。。。 默认情况下,PHP将会话保存在文件系统上。编写自己的会话机制的最简单方法是将会话保存到cookie中。默认情况下,如果您使用Codeigniter会话,Codeigniter会这样做

您可以编写自己的对象,该对象具有读取、写入、编辑和删除的方法。。。会话数组。在保存到cookie之前,必须序列化该数组。会话保存在cookie中后,您可以使用编写的方法将其取出、编辑或删除等。这样做时,请注意安全性,因为用户可以查看其cookie。您必须加密会话值

然后,若您决定将会话保存到数据库中,那个么您可以使用相同的方法,但这次将会话保存到数据库中,而不是保存到cookie中

最好的方法是编写每个会话类都将实现的会话接口。这样,您就可以使用会话类,而不必关心会话存储在哪里

如果你不明白我现在说的是什么,那么就构建你自己的会话包装器,这可以帮助你了解更多关于会话的信息。并为您提供了使用OOP处理会话的好方法。一旦有了它,您就可以使用该API编写会话接口,并在每个会话类中实现该接口,并编写您自己的逻辑—如何以及在何处保存会话数据


还有一件事,PHP会话机制没有任何问题。

如果使用PHP会话,则不需要使用PHP的会话处理。基本上,标准会话将数据存储在服务器(memcache、文件或数据库)上,数据的ID/密钥放在给用户代理的cookie中

加密cookie只是将数据存储在用户代理上的cookie中,完全放弃ID/密钥。当存储卸载给用户时,这会减少服务器负载

如果数据不够重要,无法进行加密,也可以只加密内容,以防止人们更改数据,即使他们可以看到原始内容

你可能想试试我的简单库,它使用加密的cookies

$_SESSION = \Kit\Cookie::get('session');
...do stuff...
\Kit\Cookie::set('session', $_SESSION);

只需确保在向用户发送任何输出之前保存cookie,因为需要首先发送所有头。

取决于您想要的会话为什么不使用会话设置保存处理程序?@Bondye这是什么意思?用户,我可以使用它,但我想进入更高级的编程。这只是练习,你的问题我不清楚。您需要来自scracth的会话处理程序。为什么?什么课程?我不知道你说的“什么课程”是什么意思,但这是为了练习。我读了一些东西,很明显,饼干是有可能的。我就是不知道怎么做这是基本的PHP。我不想使用过程会话,我想创建一个自定义处理程序。抱歉搞混了。正是我要找的!非常感谢!