cookie and session
来源:互联网 发布:手机淘宝如何退换货物 编辑:程序博客网 时间:2024/05/22 14:10
cookie
Cookie 是通过HTTP标头进行设置的,所以也可以直接使用 header 方法进行设置。
header("Set-Cookie:cookie_name=value");
setcookie
共有7个参数,常用的有5个
name( Cookie名)可以通过 $_COOKIE['name'] 进行访问;
value(Cookie的值)
expire(过期时间)Unix 时间戳格式,默认为0,表示浏览器关闭即失效;
path(有效路径)如果路径设置为'/',则整个网站都有效;
domain(有效域)默认整个域名都有效,如果设置了 'www.xxx.com',则只在 www 子域中有效。
setrawcookie
serawcookie 也是设置 Cookie 的函数,跟 setcookie 基本一样,唯一的不同就是 value 值不会自动的进行 urlencode ,因此在需要的时候要手动的进行 urlencode 。
删除 Cookie
php 中没有删除 Cookie 的函数,在 PHP 中删除 cookie 也是采用 setcookie 函数来实现。
setcookie('test', '', time()-1);
将 cookie 的过期时间设置到当前时间之前,则该 cookie 会自动失效,也就达到了删除 cookie 的目的。之所以这么设计是因为 cookie 是通过 HTTP 的标头来传递的,客户端根据服务端返回的 et-Cookie 段来进行 cookie 的设置,如果删除 cookie 需要使用新的 Del-Cookie 来实现,则 HTTP 头就会变得复杂,实际上仅通过 Set-Cookie 就可以简单明了的实现Cookie的设置、更新与删除。
也可以直接通过 header 来删除 cookie 。
header("Set-Cookie:test=1393832059; expires=".gmdate('D, d M Y H:i:s \G\M\T', time()-1));
这里用到了 gmdate,用来生成格林威治标准时间,以便排除时差的影响。
cookie 的有效路径
cookie 中的路径用来控制设置的 cookie 在哪个路径下有效,默认为 '/' ,在所有路径下都有,当设定了其他路径之后,则只在设定的路径以及子路径下有效,例如:
setcookie('test', time(), 0, '/path');
上面的设置会使 test 在 /path 以及子路径 /path/abc 下都有效,但是在根目录下就读取不到 test 的 cookie 值。
一般情况下,大多是使用所有路径的,只有在极少数有特殊需求的时候,会设置路径,这种情况下只在指定的路径中才会传递 cookie 值,可以节省数据的传输,增强安全性以及提高性能。
当我们了有效路径的时候,不在当前路径的时候则看不到当前 cookie。
session 与 cookie 的异同
cookie 将数据存储在客户端,建立起用户与服务器之间的联系,通常可以解决很多问题,但是 cookie 仍然具有一些局限:
cookie 相对不是太安全,容易被盗用导致 cookie欺骗;
单个 cookie 的值最大只能存储 4k ;
每次请求都要进行网络传输,占用带宽。
session 是将用户的会话数据存储在服务端,没有大小限制,通过一个 session_id 进行用户识别, PHP 默认情况下 session id 是通过 cookie 来保存的,因此从某种程度上来说, seesion 依赖于 cookie 。但这不是绝对的, session id 也可以通过参数来实现,只要能将 session id 传递到服务端进行识别的机制都可以使用 session 。
session
在 PHP 中使用 session 非常简单,先执行 session_start 方法开启 session,然后通过全局变量 $_SESSION 进行 session 的读写。
session_start();$_SESSION['name'] ='lavender'; //在这里设置name的session值为RRecho $_SESSION['name'];
session 会自动的对要设置的值进行 encode 与 decode ,因此 session 可以支持任意数据类型,包括数据与对象等。
session_start();$_SESSION['name'] ='lavender'; //在这里设置name的session值为RRecho $_SESSION['name'];
默认情况下,session 是以文件形式存储在服务器上的,因此当一个页面开启了 session 之后,会独占这个 session 文件,这样会导致当前用户的其他并发访问无法执行而等待。可以采用缓存或者数据库的形式存储来解决这个问题。
删除与销毁 session
删除某个 session 值可以使用 PHP 的 unset 函数,删除后就会从全局变量 $_SESSION 中去除,无法访问。
unset($_SESSION['name']);if (isset($_SESSION['name'])) { echo $_SESSION['name'];}
使用 unset 删除名为 name 的 session ,再直接输出会有 name 不存在的 Notice 。
如果要删除所有的 session ,可以使用 session_destroy 函数销毁当前 session ,session_destroy 会删除所有数据,但是 session_id 仍然存在。
session_start();$_SESSION['name'] = 'lavender';$_SESSION['time'] = time();session_destroy();
session_destroy 并不会立即的销毁全局变量 $_SESSION 中的值,只有当下次再访问的时候, $_SESSION 才为空,因此如果需要立即销毁 $_SESSION ,可以使用 unset 函数。
session_start();$_SESSION['name'] = 'violet';$_SESSION['time'] = time();unset($_SESSION);session_destroy();var_dump($_SESSION); //此时已为空
如果需要同时销毁 cookie 中的 session_id ,通常在用户退出的时候可能会用到,则还需要显式的调用 setcookie 方法删除 session_id 的 cookie 值。
使用 session 来存储用户的登录信息
session 可以用来存储多种类型的数据,因此具有很多的用途,常用来存储用户的登录信息,购物车数据,或者一些临时使用的暂存数据等。
用户在登录成功以后,通常可以将用户的信息存储在 session 中,一般的会单独的将一些重要的字段单独存储,然后所有的用户信息独立存储。
$_SESSION['id'] = $row['id']; //$row后加的是数据表字段$_SESSION['email'] = $row['email'];$_SESSION['userinfo'] = $row;
一般来说,登录信息既可以存储在 sessioin 中,也可以存储在 cookie 中,他们之间的差别在于 session 可以方便的存取多种数据类型,而 cookie 只支持字符串类型,同时对于一些安全性比较高的数据,cookie 需要进行格式化与加密存储,而 session 存储在服务端则安全性较高。
- session and cookie
- Session and Cookie
- session and cookie
- Java Session and Cookie
- session、cookie and cache
- session and cookie
- session and cookie
- Cookie and Session
- session and cookie
- cookie and session
- Session and cookie
- session-and-cookie#1
- Session and cookie
- Cookie and Session
- Cookie and Session
- cookie and session
- cookie and session
- cookie and session
- Codeforces 839B (implement)
- 安装samba后在init.d文件夹没有smb
- tf.nn.conv2d函数讲解
- git学习笔记整理-9-Git如何存数据及分支简介
- 图形学领域的关键算法及源码链接[转]
- cookie and session
- java中Collections方法
- mybatis框架总体说明---Mybatis学习笔记(二)
- C# Enum,Int,String的互相转换
- 【C系列】C++起步遇到的问题
- Qualcomm®骁龙™神经处理引擎(Neural Processing Engine, NPE)SDK快速入门指南
- C 语言 printf 用法
- pydot 安装 用于caffe画图
- DotNetCore跨平台~2.0提前发布喽