php会话控制cookie与Session会话处理
会话简介:HTTP(超文本传输协议)定义了通过万维网(WWW)传输文本、图形、视频和所有其他数据所有的规则,HTTP 是一种无状态的协议,说明每次请求的处理都与之前或之后的请求无关,虽然这种简化实现对于HTTP 的普及做出了卓越的贡献,但对于希望创建复杂的Web 应用程序的开发人员来说,这点有点困扰,为了解决这个问题,出现了一种在客户端机器上存储少量信息(cookie).
由于cookie 大小限制、数量及其他原因,开发人员又提出了一种解决方案:session 会话处理。
一.Cookie的应用
设置cookie:setcookie()函数可以在客户端生成一个cookie 文件,这个文件可以保存到期时间、名称、值等.
创建cookie,代码如下:
- <?php
- setcookie(‘name’,'Lee’,time()+(7*24*60*60));//设置一个过期时间为7天的cookie
- ?>
参数1:cookie 名称
参数2:cookie 值
参数3:cookie 过期时间
查看cookie
打开火狐浏览器:工具–页面信息-安全-查看cookie,可以查看到当前的cookie信息.
读取cookie,代码如下:
- <?php
- echo $_COOKIE['name'];
- ?>
删除cookie,代码如下:
- <?php
- setcookie(‘name’,”);
- setcookie(‘name’,'Lee’,time()-1);
- ?>
使用Cookie 的限制:
1、必须在HTML 文件的内容输出之前设置.
2、不同的浏览器对Cookie 的处理不一致,且有时会出现错误的结果.
3、限制是在客户端的,一个浏览器能创建的Cookie 数量最多为30 个,并且每个不能超过4KB,每个WEB 站点能设置的Cookie 总数不能超过20 个.
二.Session会话处理
在使用session 会话处理,必须开始session,使用session_start()开始会话.
创建session 并读取session,代码如下:
- <?php
- session_start();
- $_SESSION['name'] = ‘Lee’;
- echo $_SESSION['name'];
- ?>
判断session 是否存在,代码如下:
- <?php
- session_start();
- $_SESSION['name'] = ‘Lee’;
- if (isset($_SESSION['name'])) {
- echo $_SESSION['name'];
- }
- ?>
删除session,代码如下:
- <?php
- session_start();
- $_SESSION['name'] = ‘Lee’;
- unset($_SESSION['name']);
- echo $_SESSION['name'];
- ?>
销毁所有session,代码如下:
- <?php
- session_start();
- $_SESSION['name'] = ‘Lee’;
- $_SESSION['name2'] = ‘Lee’;
- session_destroy();
- echo $_SESSION['name'];
- echo $_SESSION['name2'];
- ?>
cookie与session的区别和关系
存储位置:
1.session存储在服务器位置上,可以通过php.ini里面配置session相关配置
2.cookie存储在客户端上.
php.ini里面关于session和cookie有关的配置
1,session.use_cookie = 1
是否采用Cookie方法传递session id值,默认是1,表示启用.
2,session.name = PHPSESSID
不管是Cookie传递sessioin_id,还是GET方法传递session_id,都需要使用键值,他们的格式分别是Cookie:sess_name=session_id;和/path.php?sess_name=session_id,其中sess_name就是由这里指定的.
3,session.use_only_cookies = 0
表示只使用Cookie 的方法传递session id。我们说过,传递cookie的方法,除了cookie,还有GET方法,GET方法是不安全的方法。在用户端禁用了cookie的时候,会采用GET方法传递session_id,可以通过这个设置尽用GET方法传递session_id。
4,session.cookie_lifetime = 0,session.cookie_path = / 以及session.cookie_domain =
如果使用Cookie方法传递session_id的话,这里分别指定了cookie有效域、目录和时间。分别对应setcookie()函数的形参$expire、$path和$domain。其中cookie_lifetime=0表示直到关闭浏览器才删除Cookie。还可以使用session_set_cookie_params()函数修改这些值。
5,session_name([string $name])
获取或更新session_name。如果传了name,则表示不使用默认的名称PHPSESSID(由session.name)指定,否则获取当前session_name。注意:如果设置session_name,则必须在session_start()之前调用才生效。
6,session_id([string $id])
与session_name()类似,但它是读取或者设置session_id的方法,同样,设置session_id的话,必须在session_start()之前调用才有效.
7,session_set_cookie_params()和session_get_cookie_params()
通过session_set_cookie_params()可以重新设定session.cookie_lifetime,session.cookie_path以及session.cookie_domain这三个php.ini设置,而session_get_cookie_params()则是获取这些设定的值.