wolfmoritz / session
Requires
- php: >=5.3.0
This package is auto-updated.
Last update: 2022-02-01 12:44:09 UTC
README
项目已迁移至 https://github.com/PitonCMS/Session,并在那里进行维护。
PHP 会话处理器
此类负责在页面间维护会话状态。一个经过散列和加盐的会话密钥被设置在 cookie 中,它是 MySQL 表中会话记录的关键。会话密钥每 5 分钟或根据配置数组中的设置进行一次重生成。除了密钥之外,没有其他信息在客户端存储。所有用户会话信息都保存在服务器端的数据库表中。
当会话运行时,会话处理器会寻找与 cookie 密钥匹配的会话记录,如果找到,它会运行可选的检查以验证会话。如果任何检查失败,或者会话已超时,则会销毁会话并开始一个新的会话。
会话数据可以在任何时候作为键值对或键值对数组进行设置和检索。还支持闪存数据,它只持续到下一个请求。
安装
您可以使用 Composer 安装会话处理器,或者直接下载文件到您的项目中。
使用 Composer
在 composer 中要求项目,
composer require wolfmoritz/session
或修改您的 composer.json
项目文件以要求此包,并运行更新或安装。
"require": { "wolfmoritz/session": "~1.2.0" }
这将下载文件并将类注册到 composer 自动加载器中。
或者只需文件
如果您不使用 Composer,请下载此项目并解压。您需要的唯一文件是 src/Session/SessionHandler.php
。将此文件放在您的项目中,并确保在启动脚本中包含它。
创建表
您需要使用 SessionTable.sql 脚本在 MySQL 数据库中创建会话表。您可以根据需要更改脚本中的表名,但您需要将表名作为配置项 tableName
提供。
使用方法
要使用会话处理器,请创建 WolfMoritz\Session\SessionHandler
的新实例,传入 PDO 数据库连接和配置数组。
提供 PDO 连接
定义一个新的 PDO 连接并将其作为构造函数的第一个参数传入。
$dsn = 'mysql:host=' . HOST . ';dbname=' . DBNAME; $dbh = new PDO($dsn, USERNAME, PASSWORD, DB_OPTIONS);
定义配置
定义一个配置数组,只包含您希望更改的选项。唯一必需的配置选项是您应用程序的加密密钥。请使用一个长随机的字符串,并且不要共享它。
选项
选项 | 默认值 | 描述 |
---|---|---|
cookieName | 'sessionCookie' | 您的会话cookie名称。 |
tableName | 'session' | 存储您的会话的MySQL表的名称。 |
secondsUntilExpiration | 7200 | 会话在多少秒后过期。 |
renewalTime | 300 | 会话密钥在多少秒后重新生成。 |
expireOnClose | false | 当浏览器关闭时是否销毁会话,true 或 false。 |
checkIpAddress | false | 是否匹配存储的会话的IP地址,true 或 false。 |
checkUserAgent | false | 是否匹配存储的会话的User Agent,true 或 false。 |
secureCookie | false | 是否设置加密cookie,true 或 false。注意,这仅在使用 https 时有效。 |
salt | none | 您的自定义加密密钥。任何长度为16个字符以上的字符字符串。 |
autoRunSession | true | 是否自动运行会话,或仅在需要时。 |
$config['salt'] = 'akjfao8ygoa8hba9707lakusdof87'; // Use your own salt! $config['secondsUntilExpiration'] = 1800; // 30 minutes // More configuration options ...
创建会话
将创建一个新的会话作为您应用程序流程的一部分。
$Session = new WolfMoritz\Session\SessionHandler($dbh, $config);
如果将 autoRunSession
设置为 true(默认值),则会话将立即运行并检查有效会话,必要时重新生成会话密钥,并加载任何现有会话数据以供即时检索。创建会话对象一次,或者简单地将它添加到您的依赖注入容器中作为一个单例。
当会话运行时,它将查询数据库。如果您需要使会话类可用但不需要立即运行会话,可以在配置中将 autoRunSession 设置为 false。然后,当您准备好运行会话时,调用 run()
方法。
$Session->run();
保存会话数据
会话运行后,您可以通过传递键值对或键值对数组来使用 setData()
方法添加或更新会话数据。值可以是任何类型,只要它可以序列化为JSON即可。
// Save simple key-value pair $Session->setData('lupine', 'wolf'); // Save array of key-value pairs $sessionData = array( 'feline' => 'cat', 'canine' => 'dog', 'lastModified' => 1422592486 ); $Session->setData($sessionData);
提供相同的键将覆盖会话中保存的任何先前值。
获取会话数据
要获取会话数据,请将项目键传递给 getData()
。如果没有找到键,则该方法返回 null
。要获取所有会话数据,只需不提供参数即可。
// Get one session item $value = $Session->getData('keyName'); // Get all session items $values = $Session->getData();
保存闪存数据
您可以通过传递字符串、键值对或键值对数组来使用 setFlashData()
方法添加闪存数据。值可以是任何类型,只要它可以序列化为JSON即可。闪存数据将仅保持到下一个请求,之后将自动删除。
// Save simple key-value pair $Session->setFlashData('Something went wrong!'); $Session->setFlashData('alert', 'Something went very wrong!');
获取闪存数据
要获取闪存数据,请将项目键传递给 getFlashData()
。如果没有找到键,则该方法返回 null
。要获取所有闪存数据,只需不提供参数即可。由于闪存数据在下一个请求上自动删除,因此无需显式清除闪存数据。
// Get one flash item $value = $Session->getFlashData('alert'); // Get all flash items $values = $Session->getFlashData();
取消设置会话数据
您可以通过传递项目键到unsetData()
来删除会话项目,或者不提供参数来删除所有会话数据。
// Delete one session item $Session->unsetData('keyName'); // Delete all session data $Session->unsetData();
删除会话
任何未通过验证的会话将自动销毁。但,如果您想删除会话,请调用destroy()
方法。
$Session->destroy();
警告
使用此会话类需自行承担风险。阅读代码,并理解其功能,如果您打算用于任何安全用途。对于出现问题,我概不负责。
但如果您有任何改进,请fork此项目并向我发送拉取请求!