至尊技术网 - cookie https://www.zzwws.cn/tag/cookie/ zh-CN Wed, 19 Oct 2022 22:15:00 +0800 Wed, 19 Oct 2022 22:15:00 +0800 PHP cookie加密登录与验证 https://www.zzwws.cn/archives/6366/ https://www.zzwws.cn/archives/6366/ Wed, 19 Oct 2022 22:15:00 +0800 悠悠楠杉 想要简单一点的可以用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']);
]]>
0 https://www.zzwws.cn/archives/6366/#comments https://www.zzwws.cn/feed/tag/cookie/
cookie与session的比较 https://www.zzwws.cn/archives/4975/ https://www.zzwws.cn/archives/4975/ Thu, 17 Dec 2020 10:33:00 +0800 悠悠楠杉 特点cookiesession存储地址客户端服务器端存储类型字符串,数字字符串,数字,数组,对象创建方式setcookie直接操作$_SESSION读取$_COOKIE$_SESSION销毁setcookie(key,'',0)unset(),session_destroy() ]]> 0 https://www.zzwws.cn/archives/4975/#comments https://www.zzwws.cn/feed/tag/cookie/ PHP Cookie介绍和用法 https://www.zzwws.cn/archives/4960/ https://www.zzwws.cn/archives/4960/ Thu, 26 Nov 2020 16:05:00 +0800 悠悠楠杉 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");
?>
]]>
0 https://www.zzwws.cn/archives/4960/#comments https://www.zzwws.cn/feed/tag/cookie/
js首次打开页面提示弹窗 https://www.zzwws.cn/archives/4947/ https://www.zzwws.cn/archives/4947/ Sat, 14 Nov 2020 10:38:27 +0800 悠悠楠杉 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); ]]> 0 https://www.zzwws.cn/archives/4947/#comments https://www.zzwws.cn/feed/tag/cookie/ jquery.cookie 介绍 和 用法 https://www.zzwws.cn/archives/2580/ https://www.zzwws.cn/archives/2580/ Fri, 03 Jan 2020 11:37:00 +0800 悠悠楠杉 1、依赖jQuery库

2、下载

官方github:https://github.com/carhartl/jquery-cookie
蓝奏云下载地址:https://www.lanzouy.com/i8fbxhe

3、使用

创建一个整站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;
]]>
0 https://www.zzwws.cn/archives/2580/#comments https://www.zzwws.cn/feed/tag/cookie/
js的cookie操作 https://www.zzwws.cn/archives/2442/ https://www.zzwws.cn/archives/2442/ Thu, 26 Dec 2019 13:41:00 +0800 悠悠楠杉 设置 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);
        }
    }
} 

删除cookie

document.cookie = "cname=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
]]>
0 https://www.zzwws.cn/archives/2442/#comments https://www.zzwws.cn/feed/tag/cookie/