社区后台开发 → 浏览:帖子主题
* 帖子主题:使用 PHP 获取 Cookie 的方法
pojin (ID: 1)
头衔:论坛坛主
等级:究级天王[荣誉]
积分:2826
发帖:230
来自:保密
注册:2023-12-09 09:36:49
造访:2026-05-05 13:56:22
[ 第 1 楼 ] 18 回复
一、Cookie简介

Cookie是网站为了辨别用户身份而储存在用户本地终端上的数据(通常经过加密)。在登录系统时,用户验证通过后,服务器生成一个SessionID,将该ID作为cookie保存在浏览器缓存中。客户第二次访问该服务器时,会将该cookie数据带给服务器验证,此时服务器会根据该cookie数据从数据库中读取此用户的数据,即可实现自动登录等操作。

二、获取Cookie的方法

在PHP中,获取Cookie的方法如下:
$cookie = $_COOKIE['cookie_name'];
其中cookie_name是保存在本地的cookie名称,可以通过该名称获取对应的cookie值。

三、模拟登录示例

以下是一个模拟登录的示例:
<?php
if(isset($_POST['submit'])){
  $username = $_POST['username'];
  $password = $_POST['password'];
  // 数据库验证过程
  if($username == "admin" && $password == "123456"){
    setcookie('login_user', $username, time()+3600);
    // 跳转到登录后页面
  }else{
    echo "账户或密码错误";
  }
}
?>
<form method="post" action="">
用户名:<input type="text" name="username">
密码:<input type="password" name="password">
<input type="submit" name="submit" value="提交">
</form>
以上代码中,通过表单获取用户输入的账户和密码,在数据库中验证通过后,生成一个名为login_user的cookie,过期时间为3600秒。下次用户访问该页面时,通过判断该cookie是否存在,即可实现自动登录。

四、防范Cookie劫持

Cookie劫持是指攻击者通过各种手段获得用户Cookie,在没有用户许可的情况下冒充用户进行一些操作。为了防范cookie劫持,可以参考以下措施:

1、使用HttpOnly属性。该属性指示浏览器不允许通过脚本访问该cookie,从而减少攻击者通过脚本来窃取用户cookie的风险。
setcookie('cookie_name', $value, time()+3600, '/', 'www.example.com', false, true);
可以在setcookie()函数中添加最后一个参数true来设置HttpOnly属性。

2、使用Session。session是服务器端储存用户状态的一种机制,将用户信息储存于服务器端。并将sessionID储存于客户端cokie中。
session_start(); //启用session
$_SESSION['name'] = 'value'; //给session赋值
$name = $_SESSION['name']; //获取session的值
可以通过使用Session来防范Cookie劫持攻击。
2023-12-28 19:38:57 IP:已设置保密
pojin (ID: 1)
头衔:论坛坛主
等级:究级天王[荣誉]
积分:2826
发帖:230
来自:保密
注册:2023-12-09 09:36:49
造访:2026-05-05 13:56:22
[ 第 2 楼 ] 19 回复
1.4 Cookie 属性

(1)Name:设置Cookie的名称。
(2)Value:设置Cookie的值,对于认证Cookie,Value值包括Web服务器所提供的访问令牌。
(3)Expires属性:设置Cookie的生存期。有两种存储类型的Cookie:会话性与持久性。Expires属性缺省时,为会话性Cookie,仅保存在客户端内存中,并在用户关闭浏览器时失效;持久性Cookie会保存在用户的硬盘中,直至生存期到或用户直接在网页中单击“注销”等按钮结束会话时才会失效。
(4)Path属性:定义了Web站点上可以访问该Cookie的目录。
(5)Domain属性:指定了可以访问该 Cookie 的 Web 站点或域名。Cookie 机制并未遵循严格的同源策略,允许一个子域可以设置或获取其父域的 Cookie。当需要实现单点登录方案时,Cookie 的上述特性非常有用,然而也增加了 Cookie受攻击的危险,比如攻击者可以借此发动会话定置攻击。因此,浏览器禁止在 Domain 属性中设置.org、.com 等通用顶级域名、以及在国家及地区顶级域下注册的二级域名,以减小攻击发生的范围。
(6)Secure属性:指定是否使用HTTPS安全协议发送Cookie。
使用HTTPS安全协议,可以保护Cookie在浏览器和Web服务器间的传输过程中不被窃取和篡改。该方法也可用于Web站点的身份鉴别,即在HTTPS的连接建立阶段,浏览器会检查Web网站的SSL证书的有效性。但是基于兼容性的原因(比如有些网站使用自签署的证书)在检测到SSL证书无效时,浏览器并不会立即终止用户的连接请求,而是显示安全风险信息,用户仍可以选择继续访问该站点。由于许多用户缺乏安全意识,因而仍可能连接到Pharming攻击所伪造的网站。
(7)HTTPOnly 属性:用于防止客户端脚本通过document.cookie属性访问Cookie,有助于保护Cookie不被跨站脚本攻击窃取或篡改。但是,HTTPOnly的应用仍存在局限性,一些浏览器可以阻止客户端脚本对Cookie的读操作,但允许写操作;此外大多数浏览器仍允许通过XMLHTTP对象读取HTTP响应中的Set-Cookie头。
2023-12-28 20:15:00 IP:已设置保密
分页: 1, 共 1 页
快速回复主题
账号/密码
用户: 没有注册? 密码:
评论内容