PHP中的cookie和session

怪我咯
怪我咯 原创
2023-03-04 20:12:02 1680浏览

在PHP中,有两个很重要的函数,就是我们的cookie和session,那么它们是怎么使用,又有什么区别呢?

本篇文章就带你了解一下cookie和session

cookie简介

Cookie是存储在客户端浏览器中的数据,我们通过Cookie来跟踪与存储用户数据。一般情况下,Cookie通过HTTP headers从服务端返回到客户端。多数web程序都支持Cookie的操作,

因为Cookie是存在于HTTP的标头之中,所以必须在其他信息输出以前进行设置,类似于header函数的使用限制。

设置cookie方法

setcookie("name",'zhangsan');

setcookie("name",'zhangsan',time()+60);//设置cookie有效时间为60秒

//setcookie("visittime",date("y-m-d H:i:s"),time()+60);//设置保存cookie失效时间的变量

读取cokie方法

$name=$_COOKIE["name"};

删除cookie方法

setcookie("name","",time()-1);//将cookie()的时间设置为当前时间减1,time()函数返回以秒表示的当前时间戳,把过期时间减1秒就会得到过去的时间,从而删除cookie

删除cookiez只是需要将setcookie()函数中的第二个参数设置为空值,将第三个参数cookie的过期时间设置为小于系统的当前时间即可

0.gif

了解过cookie之后我们再看一下session

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['test'] = time();var_dump($_SESSION);

session会自动的对要设置的值进行encode与decode,因此session可以支持任意数据类型,包括数据与对象等。

session_start();$_SESSION['ary'] = array('name' => 'jobs');$_SESSION['obj'] = new stdClass();var_dump($_SESSION);

默认情况下,session是以文件形式存储在服务器上的,因此当一个页面开启了session之后,会独占这个session文件,这样会导致当前用户的其他并发访问无法执行而等待。可以采用缓存或者数据库的形式存储来解决这个问题,这个我们会在一些高级的课程中讲到。

删除与销毁session

删除某个session值可以使用PHP的unset函数,删除后就会从全局变量$_SESSION中去除,无法访问。

session_start();$_SESSION['name'] = 'jobs';unset($_SESSION['name']);echo $_SESSION['name']; //提示name不存在

如果要删除所有的session,可以使用session_destroy函数销毁当前session,session_destroy会删除所有数据,但是session_id仍然存在。

session_start();$_SESSION['name'] = 'jobs';$_SESSION['time'] = time();session_destroy();

值得注意的是,session_destroy并不会立即的销毁全局变量$_SESSION中的值,只有当下次再访问的时候,$_SESSION才为空,因此如果需要立即销毁$_SESSION,可以使用unset函数。

session_start();$_SESSION['name'] = 'jobs';$_SESSION['time'] = time();unset($_SESSION);session_destroy(); var_dump($_SESSION); //此时已为空

如果需要同时销毁cookie中的session_id,通常在用户退出的时候可能会用到,则还需要显式的调用setcookie方法删除session_id的cookie值。

使用session来存储用户的登录信息

session可以用来存储多种类型的数据,因此具有很多的用途,常用来存储用户的登录信息,购物车数据,或者一些临时使用的暂存数据等。

用户在登录成功以后,通常可以将用户的信息存储在session中,一般的会单独的将一些重要的字段单独存储,然后所有的用户信息独立存储。

$_SESSION['uid'] = $userinfo['uid'];$_SESSION['userinfo'] = $userinfo;

一般来说,登录信息既可以存储在sessioin中,也可以存储在cookie中,他们之间的差别在于session可以方便的存取多种数据类型,而cookie只支持字符串类型,同时对于一些安全性比较高的数据,cookie需要进行格式化与加密存储,而session存储在服务端则安全性较高。

<?php

header("content-type:text/html; charset=utf-8");

session_start();//假设用户登录成功获得了以下用户数据$userinfo = array(

'uid' => 100,

'name' => 'liu',

'email' => '123456789@qq.com',

'sex' => 'man',

'age' => '23');

/* 将用户信息保存到session中 */

$_SESSION['uid'] = $userinfo['uid'];

$_SESSION['name'] = $userinfo['name'];

$_SESSION['userinfo'] = $userinfo;

//* 将用户数据保存到cookie中的一个简单方法 */

$secureKey = 'php';

//加密密钥$str = serialize($userinfo);

//将用户信息序列化//用户信息加密前

$str = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($secureKey), $str, MCRYPT_MODE_ECB));

//用户信息加密后//将加密后的用户数据存储到cookie中

setcookie('userinfo', $str);

?>

c9.png

最后我们再看一下session与cookie最大的区别是:

一,session是将session信息保存在服务器上,并通过一个session ID来传递客户端的信息,同时服务器接收到session ID 后,根据这个ID来提供相关的sesion信息资源

二,cookie是将所有的信息以文本的形式保存在客户端,并由浏览器进行管理和维护

三,由于session为服务器存储,所有远程用户无法修改session文件的内容,而cookie

为客户端存储,所有session要比cookie安全的多,当然还有很多优点,如控制容易,可以按照客户自定义存储等(存储于数据库)...


声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。