【小白笔记】PHP学习之路 (31) --cookie和session
来源:互联网 发布:sybase数据库下载 编辑:程序博客网 时间:2024/05/22 10:36
setcookie() 设置一条cookie。如果指定第三个unix时间戳参数,可以指定cookie的保存时间,会被写入到文件中。
默认为0,为会话cookie(浏览器进程结束后被清除)。过期的cookie会被浏览器自动清除。第四个参数指定作用路径,默认为当前
目录及其子目录。header("Set-cookie:name=value")也可以设置cookie,默认为会话cookie。
*使用setcookie()来清除cookie时遵循就近原则。即当不指定作用路径时,优先作用于同目录机子目录的cookie。
如果不指定作用路径,在子目录下无法删除上级目录的cookie。
$_COOKIE[‘name’] 获得cookie。
ob_start() 打开输出控制缓冲。使用此函数后,如果在头信息之前有显示内容如echo等,则将其暂时放到缓冲区,
等到头信息提交完毕或缓冲区占满后再提交响应主体。
*注:如果php.ini中output_buffering设置为打开,那么缓冲区对整个脚本都有效。
ob_end() 关闭输出缓冲。
session会话的大致过程:
客户端访问页面,向服务器发送请求,服务器将会检查请求头部中是否含有session的id信息,如果没有,则
创建一个session,并在响应头中添加Set-cookie信息,将session id和session name写入客户端的cookie中。
之后客户端每次向服务器发出请求,都会把cookie 一起发送过去。服务器收到请求后仍然进行检查,如果存在
session信息,则会根据客户端发送过来的id信息查找对应的session并使用。此时服务器再返回响应,将不会
再向客户端写入cookie。 如果客户端禁止cookie写入的话,那么服务器每一次返回的响应头中都会包含Set-cookie信息。
session_start() 开始一个session。使用此函数后,如果客户端首次向服务器发送信息,则服务器会向客户端写入一个
唯一地标识着客户端身份的cookie,之后客户端再访问服务器的时候就会将这个cookie发送到服务器,
服务器将根据这个cookie在服务器上找到保存在session中的与之相关的信息。在PHP中,这个cookie
标识默认名为PHPSESSID,可通过php.ini更改。也可以设置自动开启session。
session_name() 获取session的名称。如果传参,可以指定session的名称并使用,此时应使其在session_start()
之前执行。
session_id() 获取session的id。如果传参,可以设定session的id,同时使用指定id的session。
如果通过地址栏传参的参数名与默认的session_name相同(可在php.ini中设置),那么PHP会自动解析该参数,
并把该参数的值作为session_id。可以在php.ini中session.use_only_cookies配置禁止使用这种地址栏session解析。
$_SESSION[‘name’] 从session中获取变量。
session_regenerate_id() 更新session的id,旧的session不会被删除,更新后原来的session信息仍然存在于新的session中。
删除session的方法:
可以使用unset()函数卸载内存中的session变量,
使用$_SESSION=array()来清空session。
session_unset()卸载已载入内存中的session,
session_destroy()彻底删除session(包括文件和session_id),同时可以使用setcookie(session_name(),'',1,'/')将客户端的
cookie设定为过期从而将其清除。
*由于session_destroy()会将session_id一起清除,而session_unset()依赖于session_id来找到内存中的session,
因此只有当session_unset()在session_destroy()之前执行时才会生效,使用时要注意这几步操作的先后顺序。
禁用cookie时session如何传递:
如果客户端禁用了cookie,服务器无法向客户端写入cookie,那么客户端不会向服务器发送session name和session id,
此时可以通过超链接或表单隐藏域来在不同页面间传递客户端的session id值。
方法1. 在php.ini中可以配置:session.use_trans_sid。开启此项后,如果session.use_only_cookies=0,PHP会解析URL,添加
格式为session name=session id的字符串(可在url_rewirter.tags中设置自动转换的内容),将session信息添加到本页面所有
符合条件的URL后面,即可实现cookie禁用后不同页面间的信息共享()。
方法2. 使用常量SID。如果session.use_trans_sid处于开启状态,那么可使用SID常量,它是一个格式为session name=session id
的字符串,直接将其通过超链接传递到新页面即可。
方法3.自定义一个包含session信息的常量(或变量),将其通过表单隐藏域发送到新页面。
*如果使用方法一,那么需要确认php.ini中是否开启了session.use_only_cookies选项,如果开启,那么php将
不会对地址栏传递的含session name的字符串进行解析。此时需要使用方法二或方法三。
方法1:
<a href="new_page.php">new Page</a> //session.use_trans_sid必须打开,session.use_only_cookies必须关闭。
方法2:
<a href="new_page.php?<?php echo SID;?>">new Page</a> //此时必须保证php.ini中session.use_trans_sid处于开启状态。
方法3:
<?phpsession_start();$sid = isset($_COOKIE[session_name()])?"":"?".session_name()."=".session_id(); //如果客户端未开启cookie,则生成包含session信息的参数。define("DEF_SID",$sid); ?><a href="new_page.php<?php echo DEF_SID;?>">new Page</a> //通过超链接的方式将session信息传递到新页面
*超链接传递session id的方法有一定的安全风险。
表单隐藏域传递:
<form name="sidForm" action="mew_page.php" method="post"> //可以通过ajax或iframe加上js实现自动提交同时页面不跳转的功能,这里就不写那么多了<input type="hidden" name="sid" value="<?php echo session_id();?>"/><input type="submit" value="提交"/></form>
- 【小白笔记】PHP学习之路 (31) --cookie和session
- php学习笔记之cookie/session
- 【小白笔记】PHP学习之路 (32) --session(2)
- [学习笔记2]php session和cookie
- PHP之cookie和session
- php 学习笔记 -- Cookie 和 Session(六)
- php 之 cookie 和 session 简单解读(笔记)
- session和cookie学习笔记
- Session和Cookie学习笔记
- php的cookie和session小应用
- php学习之会话应用cookie和session
- php学习之 基础四 cookie和session
- PHP 学习笔记 Cookie 与 Session 详解
- php笔记之session与cookie
- PHP中cookie和session学习
- php 之 cookie 和 session 简单解读
- PHP之浅谈cookie和session
- php5学习笔记之cookie 与 session
- 黑马程序员_异常
- POJ 2709 painter
- linux读者写者问题
- 一句话介绍Android的各种Drawable
- 终于开通了啊!
- 【小白笔记】PHP学习之路 (31) --cookie和session
- ubuntu 12.04安装vmware tools
- R12打中文补丁报错
- struct 及与class的区别
- 花瓣网轮播图效果
- Java nio
- hdu 3657 Game(最小割)
- linux线程同步
- Thread—join加塞