在PHP和JavaScript中设置Cookie会话存储(SessionStorage)和本地存储(LocalStorage)

Posted 许硕的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在PHP和JavaScript中设置Cookie会话存储(SessionStorage)和本地存储(LocalStorage)相关的知识,希望对你有一定的参考价值。

A. Cookie介绍

Cookie:

Cookie常用于识别用户,它是服务器留在用户计算机中的小文件(大小限制在4KB),每当相同的计算机通过浏览器请求页面时,它会同时发送Cookie,即Cookie是随HTTP事务一起被发送的,因此会浪费一部分发送Cookie时使用的带宽。

与会话存储和本地存储较为不同的一点是,无论您需不需要在Cookie存储的数据,它都会在页面响应时于浏览器与服务器中相互传送。

B. 会话存储介绍

会话存储(SessionStorage):

会话存储常用于临时保存窗口或标签页的数据。会话存储在同源的不同窗口下不可共享,但是与window.open()方法打开的窗口共享一个会话存储(SessionStorage),即您如果关闭页面窗口或在浏览器中创建新窗口,会话存储将失效,而不是指页面路由跳转。

与Cookie不同的一点是,会话存储只会在需要的时候调用获取,并不会主动发送。

C. 本地存储介绍

本地存储(LocalStorage):

本地存储常用于需要长时间保存的数据。本地存储数据在理论上会永久保存,除非用户或服务器删除此数据。本地存储在同源的不同窗口下可共享,在不同浏览器中不可共享。

与Cookie不同的一点是,本地存储只会在需要的时候调用获取,并不会主动发送。

1. 在 PHP 中设置 Cookie

使用规范

在PHP中设置Cookie信息常使用setcookie函数,cookie函数。

接收时会进行URL解码。如果你不需要这样,可以使用setrawcookie函数代替。

需要注意的是,Cookie必须在其他信息发送前赋值,即应把Cookie赋值代码段放在其他代码段的前面。

新建Cookie

<?php
 
// setcookie函数
setcookie(name,value,expire,path,domain,secure);
 
// setrawcookie函数
setrawcookie(name,value,expire,path,domain,secure);
 
// 其他PHP或HTML代码
 
?>

setcookie函数与setrawcookie函数参数解释

参数名称 参数选项 参数解释
name 必选 名称
value 必选
expire 可选 有效期
path 可选 服务器路径
domain 可选 作用域名
secure 可选 连接方式(是否以安全HTTPS连接)

setcookie函数与setrawcookie函数返回值解释

返回值 返回类型 返回值解释
true bool 设置成功
false bool 设置失败

新建、删除Cookie示范

<?php
 
// time函数会返回当前时间的时间戳,即自Unix纪元(标准时间1970年1月1日0点,北京时间标准时间1970年1月1日8点)起至当前时间的秒数
 
// 设置一个名称为name且值为value的Cookie,此Cookie直到浏览器标签页或窗口关闭后失效
setcookie(\'name\',\'value\');
 
// 设置一个名称为name且值为value的Cookie,此Cookie直到24小时关闭后失效
setcookie(\'name\',\'value\',time()+60*60*24);
 
// 设置一个名称为name且值为value的Cookie,此Cookie直到24小时关闭前失效
// 值得说明的是,由于官方没有提供立即删除Cookie的方法,所以开发者们常用这种方法来立即删除Cookie
setcookie(\'name\',\'value\',time()-60*60*24);
 
// 变量操作,将一个名称为name且的Cookie的值变更为value,
$_COOKIE[\'name\'] = \'value\'
 
?>

获取Cookie

<?php
 
// 第一种方法
$HTTP_COOKIE_VARS["name"]
 
// 第二种方法(推荐)
$_COOKIE["name"]
 
// 例如,以下代码把Cookie name的值赋值给了变量var
$var = $_COOKIE["name"];
 
?>

2. 在 PHP 中设置 会话存储

使用规范

在PHP中设置会话存储,应以session_start函数开始——值得注意的是,此函数必须在其他信息发送前调用,即应把其代码段放在其他代码段的前面,如以下示范:

<?php
 
session_start();
 
// 其他PHP或HTML代码
 
?>

设置会话存储

随后,我们可以用变量操作的方式来设置会话存储,如以下示范:

<?php
 
session_start();
 
// 将一个名为name的会话存储设置为value
$_SESSION[\'name\'] = \'value\';
 
// 将一个名为number的会话存储设置为0
$_SESSION[\'number\'] = 0;
 
// 其他PHP或HTML代码
 
?>

获取会话存储

我们可以用以下方式获取会话存储或将会话存储数值赋值到变量中。

<?php
 
// 获取名为name的本地存储
$_SESSION[\'name\']
 
 
// 将名为name的本地存储赋值给变量var
$var = $_SESSION[\'name\']
 
?>

3. 在 PHP 中设置 本地存储

目前仍未找到有效的PHP设置本地存储的方法,可以使用以下方法来借助JavaScript实现。

具体JavaScript实现步骤请查看【6. 在 JavaScript 中设置 本地存储】。

<?php
 
echo \'<script type="text/javascript"> 【JavaScript代码】 </script>\'
 
?>

4. 在 JavaScript 中设置 Cookie

使用规范

在此处提醒,如您准备将JavaScript代码嵌入到HTML文件中,您需要以如下格式来嵌入JavaScript代码,而如果您将JavaScript代码写入到.JS格式文件中,则不需要此格式。本篇博客展示的JavaScript代码默认在.JS文件下编辑。(以后将不再提醒)

<!-- 将JavaScript代码嵌入到.HTML文件 -->
 
<script type="text/javascript">
    // 如果您的浏览器等支持默认<script>标签,
    // 则您可将“ type="text/javascript" ”此句去除
    【JavaScript代码】
</script>
// .JS文件
 
【JavaScript代码】

新建、获取Cookie

在此提供两个快捷函数,您可以直接使用。原始标准方式如下第一、二行,具体值可参考函数参数或【1. 在 PHP 中设置 Cookie - 新建Cookie】的相关函数辅助理解。

// 标准设置格式,带【】的为需更改值
document.cookie="【name】=【value】; expires=【time】; path=【】";
 
// 设置Cookie函数
function setCookie(name,value,time)
	var d = new Date();
	d.setTime(d.getTime() + (time*1000));
	var expires = "expires=" + d.toGMTString();
	document.cookie = name + "=" + value + "; " + expires;

 
// 获取Cookie函数
function getCookie(name)
	var name = name + "=";
	var ca = document.cookie.split(\';\');
	for(var i=0; i<ca.length; i++) 
		var c = ca[i].trim();
		if (c.indexOf(name)==0) 
            return c.substring(name.length, c.length);
            
	
	return "";

 
 
//document.cookie="username=John Doe; expires=Thu, 18 Dec 2043 12:00:00 GMT; path=/";

setCookie函数参数解释

参数名称 参数选项 参数解释
name 必选 名称
value 必选
time 必选 有效期

(setCookie函数没有返回值。)

getCookie函数参数解释

参数名称 参数选项 参数解释
name 必选 要查询的Cookie名称

getCookie函数返回值解释

返回值 返回类型 解释
"" string 表示Cookie值查询失败或没有此Cookie
【具体值】 string 表示Cookie值查询成功,返回具体Cookie值

新建、删除Cookie示范

如PHP,新建Cookie和删除Cookie与PHP相关操作相差不多,删除Cookie即将Cookie作用时间提前——如下:

// 新建Cookie
document.cookie = "name=value1; expires=Sun, 31 Dec 2025 12:00:00 UTC; path=/";
 
// 覆盖Cookie
document.cookie = "name=value2; expires=Sun, 31 Dec 2025 12:00:00 UTC; path=/";
 
// 删除Cookie
document.cookie = "name=value1; expires=Sun, 31 Dec 2022 12:00:00 UTC; path=/";
获取Cookie
// 基本语句
getCookie(); // 参数:Cookie名称
 
// 实际应用
getCookie("name");
 
// 变量赋值
var name = getCookie("name");
let name = getCookie("name");

5. 在 JavaScript 中设置 会话存储

使用规范

在JavaScrpit中,设置会话存储和设置本地存储的API是相同的。仅需将会话存储sessionStorage和本地存储localStorage部分相互转换即可。

查看是否支持会话存储

if (!window.sessionStorage) 
    // ! window.sessionStorage返回true值,不支持sessionStorage
    console.log("浏览器不支持sessionStorage"); 
 else 
    // ! window.sessionStorage返回false值,支持sessionStorage

新建、删除、获取会话存储

JavaScript有关会话存储的方法
类别	方法
新建	sessionStorage.setItem("name", "value");
新建	sessionStorage.name = "value";
新建	sessionStorage["name"] = "value";
获取	sessionStorage.getItem("name");
获取	sessionStorage.name;
获取	sessionStorage["name"];
删除	sessionStorage.removeItem(name); // 删除单个数据
删除	sessionStorage.clear(); // 清除所有数据

6. 在 JavaScript 中设置 本地存储

使用规范

在JavaScrpit中,设置会话存储和设置本地存储的API是相同的。仅需将会话存储sessionStorage和本地存储localStorage部分相互转换即可。

查看是否支持本地存储

if (!window.localStorage) 
    // ! window.localStorage返回true值,不支持localStorage
    console.log("浏览器不支持localStorage"); 
 else 
    // ! window.localStorage返回false值,支持localStorage

新建、删除、获取本地存储

参考【5. 在 JavaScript 中设置 会话存储 - 新建、删除、获取会话存储】。

以上是关于在PHP和JavaScript中设置Cookie会话存储(SessionStorage)和本地存储(LocalStorage)的主要内容,如果未能解决你的问题,请参考以下文章

你如何在 PHP 中设置使用 HttpOnly cookie

在 PHP 中删除 JavaScript 会话 Cookie [重复]

无法在 Firefox 中设置和取消设置 Cookie

如何在php中设置cookie,在js中获取

在 Express 中设置客户端可访问的 Cookie

如何在 Wordpress 中设置 cookie