状态的存储-session

大部分web应用是有状态的.何为有状态呢?

一个用户在某个网站登录后,刷新页面后登录状态还保持着.这就是状态.那么服务端是如何实现的呢?

Session是服务器端技术,服务器在运行时可以为每一个用户创建一个其独享的session文件,所以用户在访问服务器web资源时,可以把各自的数据放在各自的session中,当用于再去访问该服务器中其他web端资源时,其他web端再从session取出用户各自的数据;

继续以上篇的举例.我们通过name参数访问页面.会显示对应的Hello,(name的值), 我们希望访问过一次后服务器会记住上一次传入的name值.也相当与保存状态.

在tp6中使用session需要在全局的中间件定义文件中加上下面的中间件定义

'think\middleware\SessionInit'

然后就可以使用啦

use think\facade\Session;

Session::set('name', 'thinkphp');
Session::get('name');

当然也提供了助手函数

session('name', null); // 删除 name
session('name'); // 取值
session('name', 'a'); // 设置内容

下面开始编码.

<?php
namespace app\controller;

use app\BaseController;

class Index extends BaseController {
	public function index() {
		$lastName = session('name');
		$name = input('name/s', 'World');
		session('name', $name);
		return view()->assign('name', $name)->assign('lastName', $lastName);
	}
}

页面:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>第一个页面</title>
</head>
<body>
	<h1>Hello, <?php echo $name; ?> [上次传入的name是: ] <?php echo $lastName; ?></h1>
</body>
</html>

我们测试下, 打开浏览器输入 http://localhost:8888/?name=xiaohuang

Hello, xiaohuang [上次传入的name是: ]

由于是第一次打开页面没有上一次的输入所以这里没有显示

$name = input('name/s', 'World');
session('name', $name);

这一次输入的xiaohuang 已经被存入session中. 下次就可以通过 session('name') 获取到上次输入内容.


Revision #2
Created Sun, Nov 24, 2019 6:27 PM by 小黄
Updated Wed, Nov 27, 2019 4:30 PM by 小黄