Maison >développement back-end >tutoriel php >PHP会话跟踪二(42)
Session
什么是Session
??Session从用户访问页面开始,到断开与网站连接为止,形成一个会话的生命周期。在会话期间,分配客户唯一的一个SessionID,用来标识当前用户,与其他用户进行区分。
??Session会话时,SessionID会分别保存在客户端和服务器端两个位置,对于客户端使用临时的Cookie保存(Cookie名称为PHPSESSID)或者通过URL字符串传递,服务器端也以文本文件形式保存在指定的Session目录中。
??Session通过ID接受每一个访问请求,从而识别当前用户、跟踪和保持用户具体资料,以及Session变量(在Session活动期间,可在Session中存储数字或文字资料),比如session_name等等,这些变量信息保存在服务器端。
??SessionID可以作为会话信息保存到数据库中,进行Session持久化,这样可以跟踪每个用户的登陆次数、在线与否、在线时间等。
cookie和session在php中的使用区别:
cookie和session都可以暂时保存在多个页面中使用的变量,但是它们有本质的差别。
??cookie存放在客户端浏览器中,
??session保存在服务器上。
??它们之间的联系是session ID 一般保存在cookie中,或者放在URL上。
??禁用cookie的方法:(点击IE中的“工具”—“Internet选项”,在弹出的对话框里点击“安全”—“自定义级别”项,将“允许每个对话COOKIE”设为禁用)
实现简单的会话
使用会话的基本步骤如下:
??开始一个会话
??注册会话变量
??使用会话变量
??注销变量并销毁会话
1 开始一个会话
session_start():开始一个会话或者返回已经存在的会话。
说明:这个函数没有参数,且返回值均为true。如果你使用基于cookie的session,那么在使用session_start()之前浏览器不能有任何输出,否则会发生以下错误:
Warning: Cannot send session cache limiter -headers already sent (output started at/usr/local/apache/htdocs/cga/member/1.php:2)…………
2 注册一个会话变量
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代替之。
3 使用会话变量
要使一个会话变量在某个范围内可以使用,必须首先使用session_start()函数启动一个会话。这样,就可以通过$_SESSION超级全局数组访问这个变量了。
如:echo $_SESSION[‘myvar’];
??使用前,判断变量是否是已注册的会话变量。
if(isset($_SESSION[‘myvar’]))
4 page1.php
<?<span>php session_start(); </span><span>//</span><span>使用SESSION前必须调用该函数。</span>$_SESSION[‘name’]=”我是黑旋风李逵!”; <span>//</span><span>注册一个SESSION变</span><span>量 $_SESSION[‘passwd’]</span>=<span>”mynameislikui”; $_SESSION[‘time’]</span>=<span>time(); echo ‘<br</span>/><a href=<span>“page2.php”>通过COOKIE传递SESSION <</span>/a>’; <span>//</span><span>如果客户端支持cookie,可通过该链接传递session到</span><span>下一页。 echo ‘<br</span>/><a href=“page2.php?<span>’. SID . ‘”>通过URL 传递SESSION<</span>/a>’;<span>//</span><span>客户端不支持cookie时,使用该办法传递</span><span>session. </span>?>
session_id
session_id()用于设定或取得当前session_id。php5中
既可以使用session_id(),也可以通过附加在url上的SID
取得当前会话的session_id和session_name。
??如果session_id()有具体指定值的话,将取代当前的SESSIONID值。
当cookie没有被禁用时,如果指定了一个session_id()值,每次启动session_start()都会往客户端发送一个cookie值。不论当前SESSIONID是否与指定值相等。
??如果session_id()没有指定值,则返回当前SESSIONID,当前会话没有启动的话,则返回空字符串。
??使用该函数必须在启动会话之前:session_start();
<span>查看当前SessionID </span><span>php session_start(); echo “当前的session id 为:”.session_id(); </span>?><span>??设置SessionID </span><span>php session_id(“ABC2008”);</span><span>//</span><span>必须在session_start()之前</span><span>session_start(); echo “修改的session id 为:”.session_id(); </span>?>
更换session_id,不影响信息
??session_regenerate_id()更改成功则返回true,失败则返回false。
??使用该函数可以让当前session更换SESSIONID,但不改变当前session的其他信息。
<?<span>php session_start(); $old_sessionid</span>=<span> session_id(); session_regenerate_id(); $new_sessionid</span>=<span> session_id(); echo </span><span>"</span><span>原始SessionID: $old_sessionid<br/></span><span>"</span><span>; echo </span><span>"</span><span>新的SessionID: $new_sessionid<br/></span><span>"</span><span>; echo</span><span>"</span><span><pre></span><span>"</span><span>; print_r($_SESSION); echo</span><span>"</span><span></pre></span><span>"</span><span>; </span>?>
session_name
session_name()返回当前session的name或改变当前session的name。
??如果要改变当前session的name,必须在session_start()
之前调用该函数。注意:session_name不能只由数字组
成,它至少包含一个字母。否则会在每时每刻都生成一个
新的session id.
session改名示例:
<?<span>php $previous_name</span>= session_name(<span>"</span><span>WebsiteID</span><span>"</span><span>); session_start(); echo </span><span>"</span><span>新的session名为:$previous_name<br/></span><span>"</span><span>;</span>?>
session跨页传递问题
session跨页传递需要考虑三种情况:
??客户端禁用了cookie。
??浏览器出现问题,暂时无法存取cookie
??php.ini中的session.use_trans_sid= 0或者
编译时没有打开--enable-trans-sid选项
解决session跨页传递问题的三条途径
1、设置php.ini中的session.use_trans_sid= 1或者编译时打开打开了--enable-trans-sid选项,让PHP自动跨页传递session id。
??2、手动通过URL传值、隐藏表单传递session id。
??3、用文件、数据库等形式保存session_id,在跨
页过程中手动调用。
1 解决会话传递问题
<span>page1.php ??<</span>?<span>php session_start(); $_SESSION[‘var1’]</span>=<span>“中华人民共和国”; $url</span>=“<a href=‘s2.php’>下一页</<span>a>”; echo $url; </span>?<span>><br></span>
<span>??page2.php ??<</span>?<span>php session_start(); echo “传递的session变量var1的值:”.$_SESSION[‘var1’]; </span>?<span>> ??现在你手动关闭客户端的cookie,再运行就得不到结果了</span>
2 第一种途径
设置php.ini中的session.use_trans_sid= 1
??编译时打开打开了--enable-trans-sid选项”
??注:Linux适用,Windows不适用
以上就介绍了PHP会话跟踪二(42),包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。