ci框架之session类

xiaoxiao2022-07-05  11


某平台价值19860元的编程课程资料免费领取【点我领取】


       Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在 Session 对象中。有关使用 Session 对象的详细信息,请参阅“ASP 应用程序”部分的“管理会话”。注意 会话状态仅在支持 cookie 的浏览器中保留。(来自百度百科)

目录

 

Session类

使用Session类

初始化Session类

Session是如何工作的?

什么是Session数据?

获取Session数据

添加Session数据

删除Session数据

Flashdata

Tempdata

销毁Session

访问session元数据

Session参数

session驱动


Session类

Session(会话)类可以让你保持一个用户的 "状态" ,并跟踪他在浏览你的网站时的活动。

使用Session类

初始化Session类

Session 通常会在每个页面载入的时候全局运行,所以 Session 类必须首先被初始化。可以在控制器构造函数中初始化它, 也可以在系统中自动加载。

Session 类基本上都是在后台运行, 你不会注意到。所以当初始化 session 之后,系统会自动读取、创建和更新 session 数据 。

要手动初始化 Session 类,你可以在控制器的构造函数中使用 $this->load->library() 方法:

$this->load->library('session');

初始化之后,使用

$this->session

来访问Session对象。

Session是如何工作的?

当页面载入后,Session 类就会检查用户的 cookie 中是否存在有效的 session 数据。 如果 session 数据不存在(或者与服务端不匹配,或者已经过期), 那么就会创建一个新的 session 并保存起来。

如果 session 数据存在并且有效,那么就会更新 session 的信息。 根据你的配置,每一次更新都会生成一个新的 Session ID 。

有一点非常重要,你需要了解一下,Session 类一旦被初始化,它就会自动运行。 上面所说的那些,你完全不用做任何操作。正如接下来你将看到的那样, 你可以正常的使用 session 数据,至于读、写和更新 session 的操作都是自动完成的。

什么是Session数据?

Session 数据是个简单的数组,带有一个特定的 session ID (cookie)。

CodeIgniter 使用了相同的方式来访问 session 数据,同时使用了 PHP 自带的 session 处理机制, 使用 session 数据和操作 $_SESSION 数组一样简单(包括读取,设置,取消设置)。

另外,CodeIgniter 还提供了两种特殊类型的 session 数据:flashdata 和 tempdata ,在下面将有介绍。

注意: 默认情况下, Session Cookie 每隔 5 分钟才会更新一次,这样会减少对处理器的负荷。如果你重复的装载页面, 你会发现"上次活动"的时间在五分钟,或多于五分钟的时候才会变化,也就是 cookie 上次被写入的时间。 这个时间可以通过设置 application/config/config.php 文件里的 $config['sess_time_to_update'] 行来改变。

获取Session数据

session 数组中的任何信息都可以通过 $_SESSION 全局变量获取:

$_SESSION['item']

或者使用下面方法(函数):

$this->session->item

item是想获取的数组的键值。例如,将 'name' 键值对应的项赋值给 $name 变量, 你可以这样:

$name = $_SESSION['name']; // or: $name = $this->session->name

添加Session数据

假设某个用户访问你的网站,当他完成认证之后,你可以将他的用户名和 email 地址添加到 session 中, 这样当你需要的时候你就可以直接访问这些数据,而不用查询数据库了。(私以为这是Session最大的作用了,咳咳咳)

你可以简单的将数据赋值给 $_SESSION 数组,或赋值给 $this->session 的某个属性。

或者可以调用这个方法:

$newdata = array( 'username' => 'johndoe', 'email' => 'johndoe@some-site.com', 'logged_in' => TRUE ); $this->session->set_userdata($newdata);

其中$newdata是一个数组,里面放有你想要加入Session的内容。

如果你想一次只添加一个值,set_userdata() 也支持这种语法:

$this->session->set_userdata('some_name', 'some_value');

注意: Cookies 只能存储 4KB 的数据, 使用时要小心超出它的容量。特别指出的是,加密会产生比原数据更长的数据字符串,所以一定要当心你要存放数据的大小。

如果你想取得所有Session用户数据的数组,可以使用all_userdata():

$this->session->all_userdata();

如果你想检查某个 session 值是否存在,可以使用 isset():

isset($_SESSION['some_name']);

或者:

$this->session->has_userdata('some_name');

删除Session数据

可以使用 unset() 方法来删除 $_SESSION 数组中的某个值:

unset($_SESSION['some_name']); // 或者 unset( $_SESSION['some_name'], $_SESSION['another_name'] );

分别表示删除一条数据和删除多条数据。

Flashdata

它指的是一种只对下一次请求有效的 session 数据, 之后将会自动被清除。

Tempdata

它指的是一种带有有效时间的 session 数据, 当它的有效时间已过期,或在有效时间内被删除,都会自动被清除。和 flashdata 一样, tempdata 也是常规的 session 变量,只不过以特殊的方式保存在 '__ci_vars' 键下 (再次警告:请不要乱动这个值)。

销毁Session

要清除当前的 session(例如:退出登录时),你可以简单的使用 PHP 自带的 session_destroy() 函数或者 sess_destroy() 方法。 两种方式效果完全一样:

session_destroy(); // or $this->session->sess_destroy();

注意:这必须是同一个请求中关于 session 的最后一次操作,所有的 session 数据(包括 flashdata 和 tempdata)都被永久性销毁,销毁之后,关于 session 的方法将不可用。

访问session元数据

在之前的 CodeIgniter 版本中,session 数据默认包含 4 项:'session_id' 、 'ip_address' 、 'user_agent' 、 'last_activity' 。

session_id: session_id()ip_address: $_SERVER['REMOTE_ADDR']user_agent: $this->input->user_agent() (unused by sessions)last_activity: 取决于 session 的存储方式,没有直接的方法,

Session参数

配置文件在 application/config/config.php 中

参数默认值描述sess_driverfiles使用的存储 session 的驱动sess_cookie_nameci_sessionsession cookie 的名称sess_expiration7200 (2 hours)你希望 session 持续的秒数 如果你希望 session 不过期(直到浏览器关闭),将其设置为 0sess_save_pathNULL指定存储位置,取决于使用的存储 session 的驱动sess_match_ipFALSE读取 session cookie 时,是否验证用户的 IP 地址 注意有些 ISP 会动态的修改 IP ,所以如果你想要一个不过期的 session,将其设置为 FALSEsess_time_to_update300该选项用于控制过多久将重新生成一个新 session ID 设置为 0 将禁用 session ID 的重新生成sess_regenerate_destroyFALSE当自动重新生成 session ID 时,是否销毁老的 session ID 对应的数据 如果设置为 FALSE ,数据之后将自动被垃圾回收器删除

session驱动

还没看,看完更。

对于session的理解和掌握还停留在用于验证用户登录上,只会最简单的使用,详细运作原理和详细使用都还不会。博客也是看着教程写出来的,自己的理解少之又少。总之还需要努力。

转载请注明原文地址: https://www.6miu.com/read-4968455.html

最新回复(0)