至尊技术网 - cookie https://www.zzwws.cn/tag/cookie/ PHP cookie加密登录与验证 https://www.zzwws.cn/archives/6366/ 2022-10-19T22:15:00+08:00 想要简单一点的可以用session,但session是创建会话,也会创建文件,这样文件会越来越多,会有些影响,所以用cookie会更好一点!<?php /** * cookie加密登录与验证 * @param array $userInfo 用户信息 * @param bool $validate 是否为验证或者填入token值验证,默认为false * @param int $expiresTime 过期时间,默认为1天 * @param string $tag token标签,默认为zz_token * @return bool|string */ function zz_login($userInfo, $validate = false, $expiresTime = 1, $tag = 'zz_token') { $salt = zz_salt(); $host = $_SERVER['HTTP_HOST']; if (!$salt) { return false; } if (!$validate) { try { $expiresTime = time() + 3600 * 24 * $expiresTime; $token = base64_encode(json_encode(['userInfo' => $userInfo, 'domain' => $host, 'expiresTime' => $expiresTime, 'code' => md5(json_encode($userInfo) . $host . $expiresTime . $salt)])); setcookie($tag, $token, $expiresTime, '/'); return $token; } catch (Exception $e) { return false; } } else { if($validate === true){ if (empty($_COOKIE[$tag])) { return false; } $arr = json_decode(base64_decode($_COOKIE[$tag]), true); }else{ $arr = json_decode(base64_decode($validate), true); } if (empty($arr['userInfo']) || empty($arr['domain']) || $arr['domain'] != $host || empty($arr['code']) || empty($arr['expiresTime']) || $arr['expiresTime'] <= time()) { return false; } return $arr['code'] === md5(json_encode($arr['userInfo']) . $host . $arr['expiresTime'] . $salt); } return true; } /** * 生成安全码 * @return string */ function zz_salt() { $root = $_SERVER['DOCUMENT_ROOT']; $file = $root.'/salt.php'; if(is_file($file)){ include($file); if(empty($salt) || empty($saltRoot) || $saltRoot != $root){ $salt = rand_str(20,true); file_put_contents($file,"<?php \r\n\$salt = '{$salt}';\r\n\$saltRoot = '{$root}';"); } }else{ $salt = rand_str(20,true); file_put_contents($file,"<?php \r\n\$salt = '{$salt}';\r\n\$saltRoot = '{$root}';"); } return $salt; } /** * 生成随机字符串 * @param int $num 字符串位数,默认为6 * @param bool $special 使用特殊字符,默认为false * @return string */ function rand_str($num = 6,$special = false) { $str = 'abcedfghjkmnpqrstuvwxyzABCEDFGHJKMNPQRSTUVWXYZ0123456789'; if($special){ $str .= '!@#$%^&*'; } return substr(str_shuffle($str), 0, $num); } // 登录 $userInfo = ['id' => 1,'username' => 'admin']; zz_login($userInfo); // 验证 if(zz_login('',true)){ echo '登录'; }else{ echo '未登录'; } // 获取用户信息 $arr = json_decode(base64_decode($_COOKIE['zz_token']),true); print_r($arr['userInfo']); cookie与session的比较 https://www.zzwws.cn/archives/4975/ 2020-12-17T10:33:00+08:00 特点cookiesession存储地址客户端服务器端存储类型字符串,数字字符串,数字,数组,对象创建方式setcookie直接操作$_SESSION读取$_COOKIE$_SESSION销毁setcookie(key,'',0)unset(),session_destroy() PHP Cookie介绍和用法 https://www.zzwws.cn/archives/4960/ 2020-11-26T16:05:00+08:00 Cookie 是什么?cookie 常用于识别用户。cookie 是一种服务器留在用户计算机上的小文件。每当同一台计算机通过浏览器请求页面时,这台计算机将会发送 cookie。通过 PHP,您能够创建并取回 cookie 的值。如何创建 Cookie?setcookie() 函数用于设置 cookie。语法setcookie(name, value, expire, path, domain); 实例在下面的例子中,我们将创建名为 "user" 的 cookie,并为它赋值 "runoob"。我们也规定了此 cookie 在一小时后过期:<?php setcookie("user", "runoob", time()+3600); ?> 如何取回 Cookie 的值?PHP 的 $_COOKIE 变量用于取回 cookie 的值<?php // 输出 cookie 值 echo $_COOKIE["user"]; // 查看所有 cookie print_r($_COOKIE); ?> 我们使用 isset() 函数来确认是否已设置了 cookie<?php if (isset($_COOKIE["user"])) echo "欢迎 " . $_COOKIE["user"] . "!<br>"; else echo "普通访客!<br>"; ?> 如何删除 Cookie?当删除 cookie 时,您应当使过期日期变更为过去的时间点。<?php // 1、设置 cookie 过期时间为过去 1 小时 setcookie("user", "", time()-3600); // 2、把 Cookie 的生存时间默认设置为空,或者把失效时间设置为0,也可以直接删除 Cookie setcookie("baiduSite"); ?> js首次打开页面提示弹窗 https://www.zzwws.cn/archives/4947/ 2020-11-14T10:38:27+08:00 function get_cookie(Name) { var search = Name + "="; var returnvalue = ""; if (document.cookie.length > 0) { offset = document.cookie.indexOf(search); if (offset != -1) { // if cookie exists offset += search.length; // set index of beginning of value end = document.cookie.indexOf(";", offset); // set index of end of cookie value if (end == -1) end = document.cookie.length; returnvalue=decodeURI(document.cookie.substring(offset, end)) } } return returnvalue; } setTimeout(function(){ if (get_cookie("popped")==""){ document.cookie="popped=yes"; alert('这里是弹窗!'); } },1000); jquery.cookie 介绍 和 用法 https://www.zzwws.cn/archives/2580/ 2020-01-03T11:37:00+08:00 1、依赖jQuery库2、下载官方github:https://github.com/carhartl/jquery-cookie蓝奏云下载地址:https://www.lanzouy.com/i8fbxhe3、使用创建一个整站cookie$.cookie('name', 'value'); 创建一个整站cookie ,cookie 的有效期为 7 天$.cookie('name', 'value', { expires: 7 }); 创建一个仅对 path 路径页面有效的 cookie ,cookie 的有效期为 7 天$.cookie('name', 'value', { expires: 7, path: '/' }); 读取 cookie$.cookie('name'); // 如果cookie存在 则获取到cookie值 => 'value' $.cookie('nothing'); // 如果cookie不存在 则返回 => undefined 获取所有可见的 cookie$.cookie(); // 数据格式 => { name: 'value' } 删除 cookie$.removeCookie('name'); // => true $.removeCookie('nothing'); // => false 删除带属性的cookie$.cookie('name', 'value', { path: '/' }); // 错误 $.removeCookie('name'); // => false // 正确 $.removeCookie('name', { path: '/' }); // => true 4、属性domain创建cookie所在网页所拥有的域名$.cookie('name', 'value', { domain: 'weber.pub' }); secure默认是false,如果为true,cookie的传输协议需为https;$.cookie('name', 'value', { secure: true }); $.cookie('name'); // => 'value' $.removeCookie('name', { secure: true }); raw默认为false,读取和写入时候自动进行编码和解码(使用encodeURIComponent编码,使用decodeURIComponent解码),关闭这个功能,请设置为true。$.cookie.raw = true; json$.cookie.json = true; js的cookie操作 https://www.zzwws.cn/archives/2442/ 2019-12-26T13:41:00+08:00 设置 cookie 的函数//设置cookie函数 function setCookie(cname, cvalue, exdays = 1) { var d = new Date(); d.setTime(d.getTime() + (exdays*24*60*60*1000)); var expires = "expires="+ d.toUTCString(); document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; } 上面这个函数的的参数是:cookie 的名字(cname),cookie 的值(cvalue),以及知道 cookie 过期的天数(exdays)。通过把 cookie 名称、cookie 值和过期字符串相加,该函数就设置了 cookie。获取 cookie 的函数//获取cookie函数 function getCookie(cname) { var name = cname + "="; var decodedCookie = decodeURIComponent(document.cookie); var ca = decodedCookie.split(';'); for(var i = 0; i <ca.length; i++) { var c = ca[i]; while (c.charAt(0) == ' ') { c = c.substring(1); } if (c.indexOf(name) == 0) { return c.substring(name.length, c.length); } } return ""; } 把 cookie 作为参数(cname)。创建变量(name)与要搜索的文本(CNAME”=”)。解码 cookie 字符串,处理带有特殊字符的 cookie,例如 “$”。用分号把 document.cookie 拆分到名为 ca(decodedCookie.split(';'))的数组中。遍历 ca 数组(i = 0; i < ca.length; i++),然后读出每个值 c = ca[i]。如果找到 cookie(c.indexOf(name) == 0),则返回该 cookie 的值(c.substring(name.length, c.length)。如果未找到 cookie,则返回 ""。检测 cookie 的函数创建检查 cookie 是否设置的函数。如果已设置 cookie,将显示一个问候。如果未设置 cookie,会显示一个提示框,询问用户的名字,并存储用户名 cookie 365 天,通过调用 setCookie 函数:function checkCookie() { var username = getCookie("username"); if (username != "") { alert("Welcome again " + username); } else { username = prompt("Please enter your name:", ""); if (username != "" && username != null) { setCookie("username", username, 365); } } } 删除cookiedocument.cookie = "cname=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";