http://wenwen.soso.com/z/q189568957.htm 实现本地修改网站,服务器上的网站跟着自动更新php
Cookie与Session数据库
Cookie和Session是两种不一样的存储机制,前者是从一个Web页面到下一个页面的数据传递方法,存储在客户端;后者是让数据在页面中持续有效的方法,存储在服务器端。数组
1.Cookie管理浏览器
1.1 什么是Cookie?缓存
Cookie是一种在客户浏览器存储数据并以此来跟踪和识别用户的机制。(简单地说,Cookie是Web服务器暂时存储在用户硬盘上的一个文本文件,并随后被Web浏览器读取。)当用户再次访问该Web网站时,网站经过读取Cookie文件记录这位访客的特定信息(如上次访问的位置,花费的时间,用户名和密码等),从而迅速做出响应。如在页面中不须要输入用户的ID和密码便可直接登陆网站等。安全
Cookie文本文件的命令格式为:用户名@网站地址[数字].txt服务器
1.2 Cookie的功能cookie
Web服务器能够经过Cookie包含的信息来筛选或维护这些信息,以判断在HTTP传输中的状态。Cookie经常使用于如下三个方面:session
1)记录访客的某些信息。如能够利用Cookie记录用户访问网页的次数,或者记录访客曾经输入过的信息。另外,某些网站可使用Cookie自动记录访客上次登陆的用户名。函数
2)在页面之间传递变量。浏览器并不会保存当前页面上的任何变量的信息,当页面被关闭时页面上的全部变量信息将随之消失。若是用户声明一个变量id=8,要把这个变量传递到另外一个页面,能够把变量id以Cookie形式保存下来,而后在下一页读取该Cookie来获取该变量的值。
3)将所查看的Internet页存储在Cookie临时文件夹中,能够提升之后浏览的速度。
1.3建立Cookie
在PHP中经过setcookie()函数建立Cookie。在建立Cookie以前必须了解的是,Cookie是HTTP头标的组成部分,而头标必须在页面其它内容以前发送,所以它必须最早输出。
使用setcookie建立Cookie,实例代码以下:
<?php
setcookie("TMCookie",$value,time()+3600,"/tm/”,".mrbccd.com",1);//设置有效时间为60秒,有效目录为“/tm/”,有效域名为"mrbccd.com" 及其全部子域名
?>
1.4读取Cookie
在PHP中能够直接经过超级全局数组$_COOKIE[]来读取浏览器端的Cookie值
1.5删除Cookie
1)使用setcookie()函数删除Cookie
代码为:setcookie("name","",time()-1);
在上面的代码中,time()函数返回以秒表示的当前时间戳,把当前时间减1秒就会获得过去的时间,从而删除Cookie.把失效时间设置为0,也能够直接删除Cookie
2)在浏览器中手动删除Cookie
1.6 Cookie的生命周期
若是Cookie不设定失效时间,就表示它的生命周期就为浏览器会话的期间,只要关闭IE浏览器,Cookie就会自动消失。这种Cookie被称为会话Cookie,通常不保存在硬盘上,而是保存在内存中。
若是设置了失效时间,那么浏览器会把Cookie保存到硬盘中,再次打开浏览器时会依然有效,直到它的有效期超时。
2.Session管理
2.1什么是session
session 译为会话,在计算机术语中,session是指一个终端用户与交互系统进行通讯的时间间隔,一般指从注册进入系统到注销退出系统所通过的时间。
2.2session工做原理
当启动一个session会话时,会生成一个随机且惟一的session_id,也就是session的文件名,此时session_id存储在服务器的内存中。当关闭页面时此id会自动注销,从新登陆此页面,会再次生成一个随机且惟一的id.
2.3 session的功能
session在Web技术中很是重要。因为网页时一种无状态的链接程序,所以没法得知用户的浏览状态。经过session则可记录用户的有关信息,以供用户再次以此身份对Web服务器提交要求时做确认。例如,在电子商务网站中,经过session记录用户登陆的信息,以及用户所购买的商品,若是没有session,那么用户每进入一个页面都须要登陆一次用户名和密码。
2.4 启动session会话
启动PHP会话有两种方式: 一种是使用session_start()函数,另外一种是使用session_register()函数为会话建立一个变量来隐含地启动会话。
1)经过session_start()函数启动会话 ,语法格式为:
bool session_start(void);
2)经过session_register()函数建立会话
session_register()函数用来为会话建立一个变量来隐含地启动会话,但要求设置php.ini文件的选项,即将register_globals指令设置为on,而后从新启动Apache服务器便可。(此时不须要调用session_start()函数,PHP会在建立变量以后隐含地调用session_start()函数)
2.5 注册会话
会话变量建立后,所有保存在$_SESSION中。经过数组$_SESSION建立一个会话变量很容易,只要直接给该数组添加一个元素便可。
例如:启动会话,建立一个session变量并赋空值,代码以下:
<?php
session_start();
$_SESSION["admin"]=null;
?>
2.6 使用会话
首先须要判断会话变量是否有一个会话ID存在,若是不存在,就建立一个,而且使其可以经过全局数组$_SESSION进行访问;若是已经存在,则将这个已建立的会话变量载入以供用户使用;
如,判断存储用户名的session会话变量是否为空,若是不为空,则将该会话变量赋给$myvalue,代码以下:
<?php
if(!empty($_SESSION['session_name']))
$myvalue=$_SESSION['session_name'];
?>
2.7 删除会话
1)删除单个会话
unset($_SESSION['user']); 使用unset()函数时,要注意$_SESSION数组中元素不能省略,即不能够一次注销整个数组,这样会禁止整个会话的功能,如unset($_SESSION)函数会将全局变量$_SESSION销毁,并且没有办法将其恢复,用户也不能再注册$_SESSION变量。
2)删除多个会话
可将一个空的数组赋值给$_SESSION来实现,代码以下:$_SESSION=array();
3)结束当前会话
若是整个会话已经结束,首先应该注销全部的会话变量,而后使用session_destory()函数清除结束当前的会话,并清空会话中的全部资源,完全销毁session,代码以下:
session_destroy();
2.8 session设置时间
1)客户端没有禁止Cookie
使用session_set_cookie_params()设置session的失效时间,此函数是session结合cookie设置失效时间。如要让session在1分钟后失效,实例代码以下:
<?php
$time=1*60;
session_set_cookie_params($time);
session_start();
$_SESSION[username]='mr';
?> (通常不推荐使用此函数,此函数在一些浏览器上会出现问题,因此通常手动设置失效时间)
使用setcookie()函数可对session设置失效时间,代码以下:
<?php
session_start();
$time=1*60;
setcookie(session_name(),session_id(),time()+$time,"/"); session_name是session的名称,session_id是判断客户端用户的标识,由于session_id是随机产生的惟一名称,因此session是相对安全的。失效时间和Cookie的失效时间同样,最后一个参数为可选参数,是放置Cookie的路径。
$_SESSION['user']="mr";
?>
2)客户端禁止Cookie
当客户端禁用Cookie时,Session页面间传递会失效,能够将客户端禁止Cookie想象成一家大型连锁超市,若是在其中一家超市内办理了会员卡,可是超市之间没有联网,那么会员卡就只能在办理的那家使用,解决这个问题的方法有4个。
① 在登陆以前提醒用户必须打开Cookie.
② 设置php.ini文件中的session.use_trans_sid=1,或者编译时打开-enable-trans-sid选项,让PHP自动跨页面传递session_id.
③ 经过GET方法,隐藏表单传递session_id,在页面间传递中手动调用。
④ 使用文件或者数据库存储session_id,在页面间传递中手动调用。
2.9 Session 临时文件
使用PHP函数session_save_path()存储session临时文件,可缓解因临时文件的存储致使服务器效率低和站点打开缓慢的问题
<?php
$path='./tmp/';
session_save_path($path);
session_start(); //初始化session
$_SESSION[username]=true;
?>
2.10 session缓存
session 缓存是将网页中的内容临时存储到IE客户端的Temporary Internet Files文件夹下,而且能够设置缓存的时间。当第一次浏览网页后,页面的部份内容在规定的时间内就被临时存储在客户端的临时文件夹中,这样在下次访问这个页面时,就能够直接读取缓存中的内容,从而提升网站的浏览效率。
缓存用的是session_cache_limiter()函数,语法是: string session_cache_limiter([string cache_limiter]) cache_limiter为public或private。同时session缓存并非指在服务器端而是客户端缓存,在服务器中没有显示。缓存时间的设置,使用的是session_cache_expire() 语法格式为:int session_cache_expire([int new_cache_expire]) 参数new_cache_expire是session缓存的时间,单位为分钟。
2.11session 数据库存储
虽然经过改变session 存储文件夹使session不至于将临时文件夹填满而形成站点瘫痪,可是若是一个大型网站一天登陆1000人,一个月登陆了30000人,这时站点中存在30000个session文件,要在这30000个文件中查询一个session_id应该不是件轻松的事情,那么这时就能够用session数据库存储,也就是PHP中的session_set_save_handler()函数。
bool session_set_save_handler(string open,string close,string read,string write,string destroy,string gc)
open(save_path,session_name) 找到session存储地址,取出变量名称
close()不须要参数,关闭数据库。
read(key) 读取session键值,key对应session_id
write(key,data) 其中data对应设置的session变量
destroy(key) 注销session对应的session键值
gc(expiry_time) 清除过时session记录