Session会话管理(PHP,Apacha)

Session存在的意义:为了解决HTTP是个无状态协议所带来的问题。

那怎么解决呢?一张图告诉你。


Session会话管理(PHP,Apacha)_第1张图片
Session流程图

从图中可以看出,Session是基于cookie来实现的,当某个用户访问服务器上的某个脚本程序时(比如apache中运行的PHP文件),该脚本程序会在启动session的情况下自动生成一个随机的字符串,并将其作为cookie值返回到客户端,并同时在服务上指定的目录下创建一个session文件存储。

该session文件也是有生命周期的,该session文件的存储位置,和生命周期都是可以进行设置的。

如下图,在谷歌浏览器上可以看到保存访问的网站中有一个PHPSESSID的cookie,这个就是默认的sessionid(注意:PHPSESSID)这个名字在php.ini中是可以更改的。


Session会话管理(PHP,Apacha)_第2张图片
cookie


Session会话管理(PHP,Apacha)_第3张图片
服务器中的session文件

如上图,是服务器中保存的session文件,通过在客户端的cookie和服务器上保存的session文件,服务器就可以和客户端模拟出一个会话了(其实是一个假会话,并不是像我们打电话一样,一直都是相通的)

总上所述,其实我们自己也是可以写一个"所谓的"会话管理的,只要利用cookie,和在服务端保持住一个我们自定义的随机字符串。

只不过session机制已经被服务器实现了,我们开发者就可以省去了很多事。

而且,在PHP中,session机制是可以被定制,PHP开发了很多接口给开发者。通过这些接口可以配置session机制。


session.save_handler = files

定义了来存储和获取与会话关联的数据的处理器的名字。默认为files

php内配置函数

设置用户自定义 会话存储函数。 如果想使用 PHP 内置的会话存储机制之外的方式, 可以使用本函数。 例如,可以自定义会话存储函数来将会话数据存储到数据库

session_set_save_handler()

www.cocoatest.com/sc/php/php/function.session-set-save-handler.html


session.save_path ="c:/wamp64/tmp"

定义了传递给存储处理器的参数。如果选择了默认的 files 文件处理器,则此值是创建文件的路径。默认为/tmp

PHP内部配置函数

session_save_path

www.cocoatest.com/sc/php/php/function.session-save-path.html


session.use_strict_mode = 0


session.use_cookies = 1

指定是否在客户端用 cookie 来存放会话 ID。默认为1(启用)。


session.use_only_cookies = 1

指定是否在客户端仅仅使用 cookie 来存放会话 ID。。启用此设定可以防止有关通过 URL 传递会话 ID 的攻击。此设定是 PHP 4.3.0 添加的。


session.name = PHPSESSID

指定会话名以用做 cookie 的名字。只能由字母数字组成,默认为PHPSESSID

PHP内部配置函数

session_name

www.cocoatest.com/sc/php/php/function.session-name.html


session.auto_start = 0

指定会话模块是否在请求开始时自动启动一个会话。默认为0(不启动)


session.cookie_lifetime = 0

以秒数指定了发送到浏览器的 cookie 的生命周期。值为 0 表示“直到关闭浏览器”。默认为0

php内部函数

获取/设置会话 cookie 参数(注意:是会话cookie)

session_get_cookie_params()

www.cocoatest.com/sc/php/php/function.session-get-cookie-params.html

voidsession_set_cookie_params(int$lifetime[,string$path[,string$domain[,bool$secure= false[,bool$httponly= false]]]] )

www.cocoatest.com/sc/php/php/function.session-set-cookie-params.html


session.cookie_path = /

指定了要设定会话 cookie 的路径。

详细功能见上面


session.cookie_domain =

指定了要设定会话 cookie 的域名。默认为无,表示根据 cookie 规范产生 cookie 的主机名。


session.cookie_httponly =

Marks the cookie as accessible only through the HTTP protocol. This means that the cookie won't be accessible by scripting languages, such as JavaScript. This setting can effectively help to reduce identity theft through XSS attacks (although it is not supported by all browsers).


session.cookie_secure=off

指定是否仅通过安全连接发送 cookie。默认为off。


session.serialize_handler = php

定义用来序列化/解序列化的处理器名字。当前支持 PHP 内部格式(名为php)和 WDDX(名为wddx)。如果 PHP 编译时加入了WDDX 支持,则只能用 WDDX。默认为php


session.gc_probability = 1

session.gc_divisor = 1000

session.gc_divisorsession.gc_probability合起来定义了在每个会话初始化时启动 gc(garbage collection 垃圾回收)进程的概率。此概率用 gc_probability/gc_divisor 计算得来。例如 1/100 意味着在每个请求中有 1% 的概率启动 gc 进程。session.gc_divisor默认为100


session.gc_maxlifetime = 1440

指定过了多少秒之后数据就会被视为“垃圾”并被清除。

Note:

如果不同的脚本具有不同的session.gc_maxlifetime数值但是共享了同一个地方存储会话数据,则具有最小数值的脚本会清理数据。此情况下,与session.save_path一起使用本指令。

Note:如果使用默认的基于文件的会话处理器,则文件系统必须保持跟踪访问时间(atime)。Windows FAT 文件系统不行,因此如果必须使用 FAT 文件系统或者其他不能跟踪 atime 的文件系统,那就不得不想别的办法来处理会话数据的垃圾回收。自 PHP 4.2.3 起用 mtime(修改时间)来代替了 atime。因此对于不能跟踪 atime 的文件系统也没问题了。


session.referer_check =

包含有用来检查每个 HTTP Referer 的子串。如果客户端发送了 Referer 信息但是在其中并未找到该子串,则嵌入的会话 ID 会被标记为无效。默认为空字符串


session.cache_expire = 180

以分钟数指定缓冲的会话页面的存活期,此设定对 nocache 缓冲控制方法无效。默认为180


session.use_trans_sid = 0

session.hash_function = 0

session.hash_bits_per_character = 5


有一些还没有放上去,下面给出链接:

www.cocoatest.com/sc/php/php/session.configuration.html#ini.session.upload-progress.enabled

php.net/manual/zh/session.configuration.php#ini.session.referer-check

www.pureweber.com/article/how-session-works/


session_start();

session_id();

session_abort();


Session会话管理(PHP,Apacha)_第4张图片
一个每日更新的干货公众号

你可能感兴趣的:(Session会话管理(PHP,Apacha))