`
810364804
  • 浏览: 783262 次
文章分类
社区版块
存档分类
最新评论

移动平台php服务器开发global.session.php 配置详解

 
阅读更多

session.gc_maxlifetime

session.gc_probability

session.gc_divisor

session.gc_probability 和session.gc_divisor合起来定义了每个会话初始化时启动gc(garbage collection垃圾回收)进程的概率。

此概率用gc_probability / session.gc_divisor 计算得来。 例如1/100表示每个请求有1%100的概率启动gc进程。session.gc_divisor默认为100

比如:session.gc_maxlifetime=30,session.gc_divisor=1000,session.gc_probability=1,就表示每一千个用户调用session_start()的时候,就百分百的会执行一次垃圾回收机制,将磁盘上没用的session文件删除。

注意:一般对于一些大型的门户网站,建议将session.gc_divisor调大一点,减少开销

接下来,我通过一个例子演示下,如何配置才能让调用gc(垃圾回收)进程呢!

通过配置php.ini文件,修改以下几个信息:

  1. session.gc_maxlifetime = 60//当session文件在60s后还没有被访问的话,则该session文件将会被视为“垃圾文件”,并且等待gc(垃圾回收)进程的调用的时候被清理掉
  2. session.gc_probability = 1000

因为gc进程被调用的概率是通过gc_probability/gc_divisor 计算得来的,这里我将session.gc_probability改成1000,而session.gc_divisor 默认情况下也是1000。则gc进程在每次执行session_start()函数的时候都会被调用到。

以下我通过截图简单的说明下:

我开启三个会话,则创建三个对应的session文件,当每个文件在30秒内都没被调用的话,就会被当成是“垃圾文件”,等到gc进程调用的时候,“垃圾文件”就会被unlink,因为之前我已经通过修改php.ini配置文件,将gc被调用的概率改成百分百,所以接下来,如果我重新使用任何一个浏览器刷新下页面的时候,三个session文件,应该只剩下一个了

session.referer_check :

"session.referer_check contains the substring you want to check each HTTP Referer for. If the Referer was sent by the client and the substring was not found, the embedded session id will be marked as invalid. Defaults to the empty string."

简而言之,HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。比如从我主页上链接到一个朋友那里,他的服务器就能够从HTTP Referer中统计出每天有多少用户点击我主页上的链接访问他的网站。
Referer其实应该是英文单词Referrer,不过拼错的人太多了,所以编写标准的人也就将错就错了。
1.ini_set函数是设置选项中的值,在执行函数后生效,脚本结束的时候,这个设置也失效。ini_set 用于更改配置文件的配制,次更改仅用于此脚本的执行。不是所有的选项都能被改函数设置的。

2.ini_get是ini_set的姐妹函数, 
ini_set是改变php.ini里的设置,ini_get是获取php.ini里的环境变量的值. 

3.register_globals是php.ini里的一个配置,这个配置影响到php如何接收传递过来的参数
register_globals的值可以设置为:On或者Off
当register_globals=Off的时候,下一个程序接收的时候应该用$_GET['user_name']和$_GET['user_pass']来接受传递过来的值。(注:当<form>;的method属性为post的时候应该用$_POST['user_name']和$_POST['user_pass'])
当register_globals=On的时候,下一个程序可以直接使用$user_name和$user_pass来接受值。
register_globals的意思就是注册为全局变量,当On的时候,传递过来的值会被直接的注册为全局变量直接使用,而Off的时候,我们需要到特定的数组里去得到它。所以,碰到上边那些无法得到值的问题的时候,应该首先检查一下你的register_globals的设置和你获取值的方法是否匹配。(查看可以用phpinfo()函数或者直接查看php.ini)

4.Session是指一个终端用户与交互系统进行通信的时间间隔,通常指从注册进入系统到注销退出系统之间所经过的时间。Session不是一个简单的时间概念,一个Session中还包括了特定的用户和服务器。因此更详细地讲,在一个Session定义的全局变量的作用范围,是指这个Session所对应的用户所访问的所有PHP。 若session.use_cookies = 1
sessionid在客户端采用的存储方式,置1代表使用cookie记录客户端的sessionid,同时,$_COOKIE变量里才会有$_COOKIE[‘PHPSESSIONID’]这个元素存在


 session与cookie的区别:
  1: session的内容存在文件里的话,文件在哪儿?
  答: 由 session.save_path = "D:/tmp",
  如果不指定, 默认放在 C:/windows/temp, Linux下默认在 "/tmp"目录
  2: cookie和session的关系
  答:cookie可以用来存储 session_id
  tangram_guid_1357433851419  思路: 如果cookie被浏览器禁用,又怎么办?
  3: session.use_cookies = 1
  这个选项是告诉服务器: 用cookie存储session_id
  session.use_only_cookies = 0  ,是否只用cookie来传session_id
  session.use_trans_sid = 1 // 设置地址栏session_id
  4: cookie与session的关系
  答:cookie用来存储和传递session_id
  如果禁用了cookie,可不可以用session?
  答:可以, 其次,我们可以通过javascript再检测浏览器是否支持cookie,并提示用户打开cookie
  5:session的默认生命周期是多久?
  答:关闭浏览器就失效 原因:因为session_id存在于cookie,而默认情况,cookie关闭浏览器即失败.
  6: 如何设置session生命周期为30分钟呢?
  答:session.cookie_lifetime = 1800 php.ini来设置
  7:http://localhost/0415/set.php , 设置session,
  请问,该session值在哪些路径下生效??
  答: 传session_id用的cookie在哪生效,session就在哪儿生效
  7.5:传session_id的cookie又在哪儿生效呢?
  答: 默认是在'/'目录下生效
  区别: cookie默认在设置的目录下生效,而session默认在/目录下生效
  8: 如果设置传session_id的cookie的有效路径呢?
  答:session.cookie_path = /, 这儿可以设置

Session储存于服务器端(默认以文件方式存储session),根据客户端提供的session id来得到用户的文件,取得变量的值,session id可以使用客户端的Cookie或者Http1.1协议的Query_String(就是访问的URL的“?”后面的部分)来传送给服务器,然后服务器读取Session的目录……。也就是说,session id是取得存储在服务上的session变量的身份证。当代码session_start();运行的时候,就在服务器上产生了一个session文件,随之也产生了与之唯一对应的一个session id,定义session变量以一定形式存储在刚才产生的session文件中。通过session id,可以取出定义的变量。跨页后,为了使用session,你必须又执行session_start();将又会产生一个session文件,与之对应产生相应的session id,用这个session id是取不出前面提到的第一个session文件中的变量的,因为这个session id不是打开它的“钥匙”。如果在session_start();之前加代码session_id($session id);将不产生新的session文件,直接读取与这个id对应的session文件。

PHP中的session在默认情况下是使用客户端的Cookie来保存session id的,所以当客户端的cookie出现问题的时候就会影响session了。必须注意的是:session不一定必须依赖cookie,这也是session相比cookie的高明之处。当客户端的Cookie被禁用或出现问题时,PHP会自动把session id附着在URL中,这样再通过session id就能跨页使用session变量了。但这种附着也是有一定条件的,即“php.ini中的session.use_trans_sid = 1或者编译时打开打开了--enable-trans-sid选项”。

session.save_handlerstring
session.save_handler定义了来存储和获取与会话关联的数据的处理器的名字。默认为files。参见session_set_save_handler()
session.save_pathstring
session.save_path定义了传递给存储处理器的参数。如果选择了默认的 files 文件处理器,则此值是创建文件的路径。默认为/tmp。参见session_save_path()

此指令还有一个可选的 N 参数来决定会话文件分布的目录深度。例如,设定为'5;/tmp'将使创建的会话文件和路径类似于/tmp/4/b/1/e/3/sess_4b1e384ad74619bd212e236e52a5a174If。要使用 N 参数,必须在使用前先创建好这些目录。在ext/session目录下有个小的 shell 脚本名叫mod_files.sh可以用来做这件事。此外注意如果使用了 N 参数并且 N 大于 0,那么将不会执行自动垃圾回收,更多信息见php.ini。另外如果用了 N 参数,要确保将session.save_path的值用双引号 "quotes" 括起来,因为分隔符分号(;)在php.ini中也是注释符号。

Warning

如果将此设定为一个全局可读的目录,例如/tmp(默认值),服务器上的其他用户有可能通过该目录的文件列表破解会话。

Note:在 PHP 4.3.6 之前,Windows 用户必须修改此选项以使用 PHP 的会话函数。必须指定一个合法路径,例如:c:/temp

session.namestring
session.name指定会话名以用做 cookie 的名字。只能由字母数字组成,默认为PHPSESSID。参见session_name()
session.auto_startboolean
session.auto_start指定会话模块是否在请求开始时自动启动一个会话。默认为0(不启动)。
session.serialize_handlerstring
session.serialize_handler定义用来序列化/解序列化的处理器名字。当前支持 PHP 内部格式(名为php)和 WDDX(名为wddx)。如果 PHP 编译时加入了WDDX 支持,则只能用 WDDX。默认为php
session.gc_probabilityinteger
session.gc_probabilitysession.gc_divisor合起来用来管理 gc(garbage collection 垃圾回收)进程启动的概率。默认为1。详见session.gc_divisor
session.gc_divisorinteger
session.gc_divisorsession.gc_probability合起来定义了在每个会话初始化时启动 gc(garbage collection 垃圾回收)进程的概率。此概率用 gc_probability/gc_divisor 计算得来。例如 1/100 意味着在每个请求中有 1% 的概率启动 gc 进程。session.gc_divisor默认为100
session.gc_maxlifetimeinteger
session.gc_maxlifetime指定过了多少秒之后数据就会被视为“垃圾”并被清除。

Note:

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

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

session.referer_checkstring
session.referer_check包含有用来检查每个 HTTP Referer 的子串。如果客户端发送了 Referer 信息但是在其中并未找到该子串,则嵌入的会话 ID 会被标记为无效。默认为空字符串。
session.entropy_filestring
session.entropy_file给出了一个到外部资源(文件)的路径,该资源将在会话 ID 创建进程中被用作附加的熵值资源。例如在许多 Unix 系统下都可以用/dev/random/dev/urandom
session.entropy_lengthinteger
session.entropy_length指定了从上面的文件中读取的字节数。默认为0(禁用)。
session.use_cookiesboolean
session.use_cookies指定是否在客户端用 cookie 来存放会话 ID。默认为1(启用)。
session.use_only_cookiesboolean
session.use_only_cookies指定是否在客户端仅仅使用 cookie 来存放会话 ID。。启用此设定可以防止有关通过 URL 传递会话 ID 的攻击。此设定是 PHP 4.3.0 添加的。
session.cookie_lifetimeinteger
session.cookie_lifetime以秒数指定了发送到浏览器的 cookie 的生命周期。值为 0 表示“直到关闭浏览器”。默认为0。参见session_get_cookie_params()session_set_cookie_params()
session.cookie_pathstring
session.cookie_path指定了要设定会话 cookie 的路径。默认为/。参见session_get_cookie_params()session_set_cookie_params()
session.cookie_domainstring
session.cookie_domain指定了要设定会话 cookie 的域名。默认为无,表示根据 cookie 规范产生 cookie 的主机名。参见session_get_cookie_params()session_set_cookie_params()
session.cookie_secureboolean
session.cookie_secure指定是否仅通过安全连接发送 cookie。默认为off。此设定是 PHP 4.0.4 添加的。参见session_get_cookie_params()session_set_cookie_params()
session.cookie_httponlyboolean
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.cache_limiterstring
session.cache_limiter指定会话页面所使用的缓冲控制方法(none/nocache/private/private_no_expire/public)。默认为nocache。参见session_cache_limiter()
session.cache_expireinteger
session.cache_expire以分钟数指定缓冲的会话页面的存活期,此设定对 nocache 缓冲控制方法无效。默认为180。参见session_cache_expire()
session.use_trans_sidboolean
session.use_trans_sid指定是否启用透明 SID 支持。默认为0(禁用)。

Note:对于 PHP 4.1.2 或以下版本,可以通过加入--enable-trans-sid配置选项去编译来启用,从 PHP 4.2.0 起,trans-sid 特性总是被编译。基于 URL 的会话管理比基于 cookie 的会话管理有更多安全风险。例如用户有可能通过 email 将一个包含有效的会话 ID 的 URL 发给他的朋友,或者用户总是有可能在收藏夹中存有一个包含会话 ID 的 URL 来以同样的会话 ID 去访问站点。

session.bug_compat_42boolean
PHP 4.2.3 以及更低版本有一个未公开的特性/错误,它允许用户在register_globals被禁用的情况下在全局范围内初始化一个会话变量。PHP 4.3.0 及更高版本会在使用此特性时并且启用了session.bug_compat_warn时发出警告。此特性/错误可以通过关闭此选项而禁用。
session.bug_compat_warnboolean
PHP 4.2.3 以及更低版本有一个未公开的特性/错误,它允许用户在register_globals被禁用的情况下在全局范围内初始化一个会话变量。PHP 4.3.0 及更高版本会在使用此特性时并且同时启用了session.bug_compat_42session.bug_compat_warn时发出警告。
session.hash_functioninteger
session.hash_function允许用户指定生成会话 ID 的散列算法。'0' 表示 MD5(128 位),'1' 表示 SHA-1(160 位)。

Note:

这是 PHP 5 引进的。

session.hash_bits_per_characterinteger
session.hash_bits_per_character允许用户定义将二进制散列数据转换为可读的格式时每个字符存放多少个比特。可能值为 '4'(0-9,a-f),'5'(0-9,a-v),以及 '6'(0-9,a-z,A-Z,"-",",")。

Note:

这是 PHP 5 引进的。

url_rewriter.tagsstring
url_rewriter.tags指定在使用透明 SID 支持时哪些 HTML 标记会被修改以加入会话 ID。默认为a=href,area=href,frame=src,input=src,form=fakeentry,fieldset=

Note:如果要符合 XHTML,去掉form项并在表单字段前后加上 <fieldset> 标记。

session.upload_progress.enabledboolean
Enables upload progress tracking, populating the$_SESSIONvariable. Defaults to 1, enabled.
session.upload_progress.cleanupboolean
Cleanup the progress information as soon as all POST data has been read (i.e. upload completed). Defaults to 1, enabled.

Note:It is highly recommended to keep this feature enabled.

session.upload_progress.prefixstring
A prefix used for the upload progress key in the$_SESSION. This key will be concatenated with the value of$_POST[ini_get("session.upload_progress.name")]to provide a unique index.Defaults to "upload_progress_".
session.upload_progress.namestring
The name of the key to be used in$_SESSIONstoring the progress information. See alsosession.upload_progress.prefix.If$_POST[ini_get("session.upload_progress.name")]is not passed or available, upload progressing will not be recorded.Defaults to "PHP_SESSION_UPLOAD_PROGRESS".
session.upload_progress.freqmixed
Defines how often the upload progress information should be updated. This can be defined in bytes (i.e. "update progress information after every 100 bytes"), or in percentages (i.e. "update progress information after receiving every 1% of the whole filesize).Defaults to "1%".
session.upload_progress.min-freqinteger
The minimum delay between updates, in seconds. Defaults to "1" (one second).

Thetrack_varsandregister_globalsconfiguration settings influence how the session variables get stored and restored.

Upload progress will not be registered unless session.upload_progress.enabled is enabled, and the $_POST[ini_get("session.upload_progress.name")] variable is set. SeeSession Upload Progressfor mor details on this functionality.

track_varsregister_globals配置选项影响到会话变量是怎样存储和恢复的。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics