thinkphp中的session的使用和理解!

本文深入解析了Session机制在网站登录、购物车信息及验证码保存等方面的应用。通过实例展示了如何定义、赋值、获取和销毁Session,以及Session在不同浏览器和网址间的独立性。

session的作用:session可以长时间的保存数据,不丢失。

session的常用于:
1.登录,保存登录信息
2.保存购物车信息
3.保存验证码信息

定义session常量

define('WXUSER', 'wxuser_session');
define('MEMBER', 'member_session');
define('MERCHANT', 'merchant_session');
define('AGENT', 'agent_session');
define('CART', 'cart_session');

给session赋值

session(MERCHANT, $user['id']);

根据session获取用户信息

$user = M('user')->where(array('id' => session(MERCHANT)))->find();
$this->user = $user;
$this->user_id = $user['id'];

如果session存在,直接进入主界面,否则进入登录界面

    //商户登陆
    public function login() {
        if (session(MERCHANT)) {
            $this->redirect(U('User/Index/index'));
        } else {
            $this->display();
        }
    }

登出,销毁session

    //登出
    public function userLogout()
    {
        session(null);
        //session_destroy();
        //unset($_SESSION);
        $this->redirect(U('Home/Index/index'));
    }

关于session的几点理解与测试

  1. 同一个浏览器,同一个session名,不同的网址,保存的位置不同。销毁其中一个,另外的并没有收到影响。

  2. session是保存在服务器上的,不同的网址意味着不同的服务器。销毁其中一个,其他的并没有收到影响。

  3. 当你关闭浏览器的时候,session的死期也就到了。

  4. 同一个网址,不同的浏览器打开都有对应的一个session。

  5. 大部分的Session机制都使用进程中Cookie来保存Session_id的,关闭浏览器后这个进程也就自动消失了,进程中的Cookie自然就消失了,那么Session_id也跟着消失了,再次连接到服务器时也就无法找到原来的Session了。

  6. 我们可以在登陆时点击下次自动登录,比如说“记住我一周”。这就要用到我们上文提到的另一种Cookie了——硬盘中Cookie,这时Session_id将长期保存在硬盘上的Cookie中,直到失效为止。

<think>好的,我需要帮助用户了解ThinkPHP 5中Session使用方法配置。首先,我得回顾用户提供的引用内容,确保信息准确。用户提到了四个引用,涉及Session的前缀设置、赋值方法、存储到MySQL以及过期时间配置的问题。 首先,我应该整理Session的基本配置。根据引用14,配置文件中设置前缀、存储路径过期时间很重要。特别是引用4提到过期时间不生效的问题,需要说明正确配置的方式,比如将path改为项目内的路径,并设置expire参数。 接下来是使用方法,引用2展示了如何在不同作用域赋值Session,比如使用session('name', 'value', 'prefix')。需要详细说明赋值、获取、删除清空Session的方法,确保用户能按步骤操作。 然后,存储到MySQL的部分参考引用3。这部分需要指导用户创建数据库表,修改配置中的type为数据库,并配置相关参数。同时,提醒用户注意数据表的结构字段,确保Session能正确存储。 用户可能遇到的常见问题,比如过期时间不生效,引用4指出路径配置的问题,需要强调将path设置为项目内的目录,如TEMP_PATH,并检查过期时间参数是否正确。 最后,生成相关问题,帮助用户进一步了解优化应用场景。例如,如何解决跨子域共享Session,或者如何选择不同的存储驱动。 需要确保回答结构清晰,分点说明配置步骤使用方法,结合代码示例,并引用相关的引用来源。同时,语言要简洁明了,符合中文习惯,避免使用复杂术语,让用户容易理解。</think>### ThinkPHP 5 Session 使用方法及配置详解 #### 一、基础配置 1. **配置文件位置** 在`config/session.php`中设置全局参数,包含以下核心配置项: ```php 'session' => [ 'prefix' => 'think_', // Session前缀,用于避免多应用冲突[^1][^2] 'type' => '', // 存储驱动(支持file/database/memcached等) 'auto_start' => true, // 自动开启Session 'path' => TEMP_PATH, // 存储路径(需改为项目内目录以控制过期时间)[^4] 'expire' => 3600*24*30, // 过期时间(单位:秒,需与path配合生效) ]; ``` 2. **存储驱动选择** - 默认使用文件存储(`type`留空) - 若需存储到数据库,需配置`type' => 'database'`并指定表名(详见第三部分)[^3] --- #### 二、基础操作方法 1. **赋值Session** ```php // 默认作用域 session('user_id', 1001); // 指定前缀作用域(如'test'作用域) session('name', 'thinkphp', 'test'); ``` 2. **获取Session** ```php $userId = session('user_id'); // 获取默认作用域值 $name = session('test.name'); // 获取特定前缀作用域值 ``` 3. **删除Session** ```php session('user_id', null); // 删除单个值 session('test.name', null); // 删除指定前缀的值 ``` 4. **清空Session** ```php session(null); // 清空所有作用域的Session session(null, 'test'); // 清空指定前缀的Session ``` --- #### 三、数据库存储配置(以MySQL为例) 1. **创建数据表** 执行以下SQL创建专用Session表: ```sql CREATE TABLE `session` ( `session_id` varchar(255) NOT NULL, `session_expire` int(11) NOT NULL, `session_data` blob, PRIMARY KEY (`session_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ``` 2. **修改配置文件** 在`config/session.php`中增加数据库配置: ```php 'type' => 'database', 'table' => 'session', // 表名 'database' => 'db_identifier' // 数据库配置标识(默认使用默认数据库) ``` --- #### 四、常见问题解决 1. **过期时间不生效** - 将`path`改为项目内路径(如`TEMP_PATH`) - 确保`expire`参数单位为秒且未被其他配置覆盖 2. **跨应用冲突** - 通过设置不同`prefix`值隔离Session(如后台用`admin_`,前端用`web_`)[^1] 3. **性能优化** - 高频访问场景建议使用`redis`或`memcached`驱动 - 文件存储时定期清理`runtime/temp`目录 --- §§ 相关问题 §§ 1. 如何实现ThinkPHP 5的Session跨子域名共享? 2. Session存储到Redis需要哪些额外配置? 3. 为什么Session在AJAX请求中会失效? 4. 如何验证Session加密机制的安全性?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值