PHP会话类类似于CodeIgniter会话类?

PHP会话类类似于CodeIgniter会话类?,php,codeigniter,session,Php,Codeigniter,Session,PHP会话类类似于CodeIgniter会话类?存在吗 我试图搜索,但没有得到有用的结果。 我使用的是CodeIgniter会话类,它有几个特性 非常喜欢: 存储用户的唯一会话Id、用户的IP地址、, 用户的用户代理数据、上次活动和其他信息 人工提供。这些信息存储在数据库(MySql)中。 该类创建一个cookie以将唯一会话id与会话匹配 数据库中的id。 在我看来,这个类是非常安全的 我想在CodeIgniter之外使用这个类(不使用CodeIgniter)。 有人能给我推荐一个有这些特点的

PHP会话类类似于CodeIgniter会话类?存在吗

我试图搜索,但没有得到有用的结果。 我使用的是CodeIgniter会话类,它有几个特性 非常喜欢:

存储用户的唯一会话Id、用户的IP地址、, 用户的用户代理数据、上次活动和其他信息 人工提供。这些信息存储在数据库(MySql)中。 该类创建一个cookie以将唯一会话id与会话匹配 数据库中的id。 在我看来,这个类是非常安全的

我想在CodeIgniter之外使用这个类(不使用CodeIgniter)。 有人能给我推荐一个有这些特点的课程吗


谢谢

实际上这是两双鞋:PHP会话和codeigniter会话。了解主要区别是很好的,这基本上就是一切,因为在codeigniter中,sessions确实为大型部件重新发明了轮子,并添加了一些功能

因此,在继续之前,您可能需要了解一下,PHP的内置会话支持非常强大,但没有对象接口

例如,将PHP会话存储到数据库中(默认为文件系统),这由所谓的。一些PHP扩展提供了一个保存处理程序(例如memcache)。为了让你轻松,这适用于任何与memchache协议兼容的东西,例如。但这只是一个例子。如果您正在寻找与本机PHP会话无关的会话类,请在搜索中添加“PHP3”,因为在版本4之前,PHP没有本机会话,当然,其他人需要会话,所以他们编写了自己的库

好吧,理智地说,今天使用PHP,寻找会话并说不想接触PHP会话是愚蠢的。您可能不想接触文件系统,然后将其存储到cookies。您可能不想存储到cookies,存储到任何快速的服务器端存储:memcached、mysql、couchdb、ssd文件系统。无论什么PHP本机会话在这里非常灵活:

您还可以编写自己的用户land会话保存处理程序,并将会话存储到数据库中。实际上,任何键值存储都可以:键是会话id,值是编码(序列化)的会话数据。这是一个二进制字符串

正如在重新发明车轮编码点火器之后所写的,您可能正在寻找一些功能。基本上,您可以随时查看的源代码,它没有那么复杂。有了一个好的IDE,你可以选择你想要检查的东西,或者仅仅把它看作是灵感

一个特性是元数据codeigniter分配给会话,例如远程地址、会话开始时间(非常有用)和最后一个活动(也有用)。通过在每次启动会话时将其存储到会话中,您可以很容易地模仿您自己的会话(下面的示例)。为此,您可以创建自己的会话对象。以下只是一个简单的示例,但它已经有了一些不错的特性:

  • 创建会话
  • 元数据,如远程IP、创建和上次活动时间戳
  • 销毁cookie(如果适用)
用法:

$session = new Session();
$session['foo'] = 'bar';
$session->destroy(); // yes, full destroy
守则:

/**
 * Session class
 *
 * @license MIT
 * @license-year 2012
 * @license-copyright-holder hakre <http://hakre.wordpress.com>
 */
class Session implements ArrayAccess
{
    private $meta = '__meta';
    private $started;

    public function __construct()
    {
        if (ini_get('session.auto_start')) {
            $this->started = true;
            $this->start();
        }
    }

    public function start()
    {
        $this->started || session_start();
        (isset($_SESSION[$this->meta]) || $this->init())
            || $_SESSION[$this->meta]['activity'] = $_SERVER['REQUEST_TIME'];
        $this->started = true;

    }

    /**
     * write session data to store and close the session.
     */
    public function commit()
    {
        session_commit();
    }

    public function destroy()
    {
        $_SESSION = array();
        if (ini_get("session.use_cookies")) {
            $params = session_get_cookie_params();
            setcookie(session_name(), '', time() - 42000,
                $params["path"], $params["domain"],
                $params["secure"], $params["httponly"]
            );
        }
        session_destroy();
    }

    public function get($name, $default = NULL)
    {
        return isset($_SESSION[$name]) ? $_SESSION[$name] : $default;
    }

    /**
     * @return string
     */
    public function getName()
    {
        return session_name();
    }

    private function init()
    {
        $_SESSION[$this->meta] = array(
            'ip'       => $_SERVER['REMOTE_ADDR'],
            'name'     => session_name(),
            'created'  => $_SERVER['REQUEST_TIME'],
            'activity' => $_SERVER['REQUEST_TIME'],

        );
        return true;
    }

    /**
     * Whether a offset exists
     * @link http://php.net/manual/en/arrayaccess.offsetexists.php
     * @param mixed $offset
     * @return boolean true on success or false on failure.
     * The return value will be casted to boolean if non-boolean was returned.
     */
    public function offsetExists($offset)
    {
        $this->started || $this->start();
        return isset($_SESSION[$offset]);
    }

    /**
     * Offset to retrieve
     * @link http://php.net/manual/en/arrayaccess.offsetget.php
     * @param mixed $offset
     * @return mixed Can return all value types.
     */
    public function offsetGet($offset)
    {
        $this->started || $this->start();
        return $this->get($offset);
    }

    /**
     * Offset to set
     * @link http://php.net/manual/en/arrayaccess.offsetset.php
     * @param mixed $offset
     * @param mixed $value
     * @return void
     */
    public function offsetSet($offset, $value)
    {
        $this->started || $this->start();
        $_SESSION[$offset] = $value;
    }

    /**
     * Offset to unset
     * @link http://php.net/manual/en/arrayaccess.offsetunset.php
     * @param mixed $offset
     * @return void
     */
    public function offsetUnset($offset)
    {
        unset($_SESSION[$offset]);
    }
}
/**
*课时班
*
*@license-MIT
*@许可证年份2012
*@许可证版权持有人hakre
*/
类会话实现ArrayAccess
{
私有$meta=''uuu-meta';
私家车;
公共函数构造()
{
if(ini_get('session.auto_start')){
$this->start=true;
$this->start();
}
}
公共功能启动()
{
$this->start | | session_start();
(isset($_会话[$this->meta])| |$this->init())
||$\u会话[$this->meta]['activity']=$\u服务器['REQUEST\u TIME'];
$this->start=true;
}
/**
*写入会话数据以存储和关闭会话。
*/
公共功能提交()
{
会话_提交();
}
公共职能
{
$\会话=数组();
if(ini_get(“session.use_cookies”)){
$params=会话获取cookie参数();
setcookie(会话名称(),'',时间()-42000,
$params[“路径”],$params[“域”],
$params[“安全”],$params[“httponly”]
);
}
会话_destroy();
}
公共函数get($name,$default=NULL)
{
返回isset($\u会话[$name])?$\u会话[$name]:$default;
}
/**
*@返回字符串
*/
公共函数getName()
{
返回会话名称();
}
私有函数init()
{
$\会话[$this->meta]=数组(
“ip”=>$\u服务器[“远程地址”],
“名称”=>会话名称(),
“已创建”=>$\u服务器[“请求\u时间”],
“活动”=>$\u服务器[“请求时间”],
);
返回true;
}
/**
*是否存在偏移量
*@linkhttp://php.net/manual/en/arrayaccess.offsetexists.php
*@param混合$offset
*@成功返回布尔值true,失败返回布尔值false。
*如果返回非布尔值,则返回值将强制转换为布尔值。
*/
公共函数offsetExists($offset)
{
$this->start | |$this->start();
返回isset($_会话[$offset]);
}
/**
*要检索的偏移量
*@linkhttp://php.net/manual/en/arrayaccess.offsetget.php
*@param混合$offset
*@return mixed可以返回所有值类型。
*/
公共函数offsetGet($offset)
{
$this->start | |$this->start();
返回$this->get($offset);
}
/**
*设置偏移量
*@linkhttp://php.net/manual/en/arrayaccess.offsetset.php
*@param混合$offset
*@param混合$value
*@返回无效
*/
公共函数偏移集($offset,$value)
{
$this->start | |$this->start();
$\会话[$offset]=$val
 $session = new Session();

 $session->__destruct();