前往顾页
以后地位: 主页 > 收集编程 > Php实例教程 >

PHP中session利用根本教程

时候:2011-03-24 20:33来源:知行网www.zhixing123.cn 编辑:麦田守望者

1、甚么是session?
Session的中文译名叫做“会话”,其原本的含义是指好头不如好尾的一系列行动/动静,比如打德律风时从拿起德律风拨号到挂断德律风这中间的一系列过程可以称之为一个session。目前社会上对session的了解非常混乱:偶然候我们可以看到如许的话“在一个浏览器会话期间,...”,这里的会话是指从一个浏览器窗口翻开到封闭这个期间;也能够看到“用户(客户端)在一次会话期间”如许一句话,它可能指用户的一系列行动(一般环境下是同某个详细目标相关的一系列行动,比如从登录到选购商品到结账登出如许一个网上购物的过程;但是偶然候也可能仅仅是指一次连接;此中的不同只能靠上下文来推断了。
但是当session一词与收集和谈相关联时,它又常常隐含了“面向连接”和/或“保持状况”如许两个含义,“面向连接”指的是在通信两边在通信之前要先建立一个通信的渠道,比如打德律风,直到对方接了德律风通信才气开端。“保持状况”则是指通信的一方可以或许把一系列的动静关联起来,使得动静之间可以相互依靠,比如一个办事员可以或许认出再次光临的老主顾并且记得前次这个主顾还欠店里一块钱。这一类的例子有“一个TCP session”或“一个POP3 session”。
鉴于这类混乱已不成改变,要为session下个定义就很难有同一的标准。而在浏览session相关质料时,我们也只需靠上下文来推断了解了。不过我们可以如许了解:比方我们打德律风,从拨通的那一刻起到挂断德律风期间,因为德律风一向保持着接通的状况,所以把这类接通的状况叫做session。它是访客与全部网站交互过程中一向存在的公有变量,在客户端不支撑COOKIE的时候,为了包管数据精确、宁静,就采取SESSION变量。拜候网站的来客会被分派一个独一的标识符,即所谓的会话 ID。它要么存放在客户端的 cookie,要么经过 URL 通报。
SESSION的发明弥补了HTTP和谈的范围:HTTP和谈被以为是无状况和谈,无法得知用户的浏览状况,当它在办事端完成呼应以后,办事器就落空了与该浏览器的联系。这与HTTP和谈原本的目标是符合的,客户端只需求简朴的向办事器请求下载某些文件,不管是客户端还是办事器都没有需求记载相互畴昔的行动,每主请求之间都是自力的,比如一个主顾和一个主动售货机或一个浅显的(非会员制)年夜卖场之间的关系一样。
是以经由过程SESSION(cookie是别的一种处理体例)记合用户的有关信息,以供用户再次以此身份对web办事器提起请求时作确认。会话的发明使得一个用户在多个页面间切换时可以或许保存他的信息。网站编程职员都有如许的体味,每页中的变量是不克不及鄙人一页中利用的(固然form,url也能够实现,但这都是非常不睬想的体例),而SESSION中注册的变量便可以作为全局变量利用了。
那么SESSION到底有甚么用处呢?网上购物时年夜家都用过购物车,你可以随时把你选购的商品插手到购物车中,最后再去收银台结帐。在全部过程中购物车一向扮演着临时存贮被选商品的角色,用它追踪用户在网站上的活动环境,这就是SESSION的感化,它可以用于用户身份认证,法度状况记录,页面之间参数通报等。
SESSION的实现中采取COOKIE技术,SESSION会在客户端保存一个包含session_id(SESSION编号)的COOKIE;在办事器端保存其他session变量,比如session_name等等。当用户请求办事器时也把session_id一路发送到办事器,经由过程session_id提取所保存在办事器端的变量,就可以辨认用户是谁了。同时也不难了解为甚么SESSION偶然会见效了。
当客户端禁用COOKIE时(点击IE中的“东西”—“Internet选项”,在弹出的对话框里点击“宁静”—“自定义级别”项,将“许可每个对话COOKIE”设为禁用),session_id将无法通报,此时SESSION见效。不过php5在linux/unix平台可以主动查抄cookie状况,如果客户端设置了禁用,则体系主动把session_id附加到url上通报。windows主机则无此服从。
 

2、Session常见函数及用法?
● Session_start() :开端一个会话或前往已存在的会话。
申明:这个函数没有参数,且前往值均为true。如果你利用基于cookie的session(cookie-based sessions),那么在利用Session_start()之前浏览器不克不及有任何输入,不然会产生以下错误:
Warning: Cannot send session cache limiter - headers already sent (output started at /usr/local/apache/htdocs/cga/member/1.php:2)…………
你可以在php.ini里启动session.auto_start=1,如许就无需每次利用session之前都要调用session_start()。但启用该选项也有一些限定,如果确切启用了 session.auto_start,则不克不及将工具放入会话中,因为类定义必须在启动会话之前加载以在会话中重修工具。
请求结束后所有注册的变量都会被序列化。已注册但不决义的变量被标识表记标帜为不决义。在以后的拜候中这些变量也未被会话模块定义,除非用户今后定义它们。
警告: 有些范例的数据不克不及被序列化是以也就不克不及保存在会话中。包含 resource 变量或有循环援引的工具(即某工具将一个指向本身的援引通报给另外一个工具)。
● 注册SESSION变量:
PHP5利用$_SESSION[‘xxx’]=xxx注册SESSION全局变量。和GET,POST,COOKIE的利用体例类似。
重视:session_register(),session_unregister ,session_is_registered在php5下不再利用,除非在php.ini里把register_globle设为on,不过出于宁静考虑,强烈建议封闭register_globle。HTTP_SESSION_VARS也不倡导利用了,官方建议用$_SESSION代替之。比方:
Page1.php
<?php
Session_start(); //利用SESSION前必须调用该函数。
$_SESSION[‘name’]=”我是黑旋风李逵!”; //注册一个SESSION变量
$_SESSION[‘passwd’]=”mynameislikui”;
$_SESSION[‘time’]=time();
echo '<br /><a href="page2.php">经由过程COOKIE通报SESSION</a>'; //如果客户端支撑cookie,可经由过程该链接通报session到下一页。
echo '<br /><a href="page2.php?' . SID . '">经由过程URL通报SESSION</a>';//客户端不支撑cookie时,利用该体例通报session.
?>
Page2.php
<?php
session_start();
echo $_SESSION['name']; //
echo $_SESSION['passwd']; //
echo date('Y m d H:i:s', $_SESSION['time']);
echo '<br /><a href="page1.php">前往山一页</a>';
?>

有两种体例通报一个会话 ID:
cookie
URL 参数
会话模块支撑这两种体例。cookie 更优化,但因为不老是可用,也供应替代的体例。第二种体例直接将会话 ID 嵌入到 URL 中间去。
PHP 可以透明地转换连接。除非是利用 PHP 4.2 或更新版本,需求手工在编译 PHP 时激活。在 Unix 下,用 --enable-trans-sid 建设选项。如果此建设选项和运行时选项 session.use_trans_sid 都被激活(点窜php.ini),相对 URI 将被主动点窜成包含会话 ID。
● session_id
session_id() 用于设定或取恰以后session_id。php5中既可利用session_id(),也能够经由过程附加在url上的SID取恰以后会话的session_id和session_name。
如果session_id()有详细指定值的话,将代替以后的session_id值。利用该函数前必须启动会话:session_start();
当我们利用session cookies时,如果指定了一个session_id()值,每次启动session_start()都会往客户端发送一个cookie值。非论以后session_id是不是与指定值相称。
session_id()如果没有指定值,则前往以后session_id();以后会话没有启动的话,则前往空字符串。
● 查抄session是不是存在?
在以往的php版本中凡是利用session_is_register()查抄session是不是存在,如果您利用$_SESSION[‘XXX’]=XXX来注册会话变量,则session_is_register()函数不再起感化。你可利用
isset($_SESSION[‘xxx’])来替代。
● 变动session_id session_regenerate_id() 变动成功则前往true,失败则前往false。
利用该函数可以为以后session变动session_id,但不改变以后session的其他信息。比方:
<?php
session_start();
$old_sessionid = session_id();
session_regenerate_id();
$new_sessionid = session_id();
echo "原始 SessionID: $old_sessionid<br />";
echo "新的 SessionID: $new_sessionid<br />";
echo"<pre>";
print_r($_SESSION);
echo"</pre>";
?>
● session_name() 前往以后session的name或改变以后session的name。如果要改变以后session的name,必须在session_start()之前调用该函数。重视:session_name不克不及只由数字构成,它起码包含一个字母。不然会在不时刻刻都天生一个新的session id.
session改名示例:
<?php
$previous_name = session_name("WebsiteID");
echo "新的session名为: $previous_name<br />";
?>
● 若何删除session?
1、unset ($_SESSION['xxx']) 删除单个session,unset($_SESSION['xxx']) 用来unregister一个已注册的session变量。其感化和session_unregister()不异。session_unregister()在PHP5中不再利用,可将之打入冷宫。
unset($_SESSION) 此函数千万不成利用,它会将全局变量$_SESSION烧毁,并且还没有可行的体例将其规复。用户也不再可以注册$_SESSION变量。
2、$_SESSION=array() 删除多个session
3、session_destroy()结束以后的会话,并清空会话中的所有资本。。该函数不会unset(开释)和以后session相关的全局变量(globalvariables),也不会删除客户端的session cookie.PHP默许的session是基于cookie的,如果要删除cookie的话,必须借助setcookie()函数。

------分开线----------------------------
标签(Tag):php
------分开线----------------------------
保举内容
猜你感兴趣