Loading... ## COOKIE ### 什么是COOKIE? Cookie是由网站存储在用户计算机上的小型文本文件,用于在用户访问网站时跟踪和识别用户。Cookie可以在用户的计算机上存储有关用户行为和偏好的信息,以便在用户下次访问相同网站时提供个性化的体验。以下是一些关于Cookie的重要信息: 1. **用途**: - 跟踪用户会话:网站可以使用Cookie来跟踪用户在网站上的活动和会话,以便在用户导航网站时保持连续性。 - 记住用户偏好:Cookie可以存储用户个性化设置和偏好,如语言选择、主题偏好等。 - 实现购物车功能:在电子商务网站上,Cookie常用于存储购物车内容,以便用户可以在不同页面之间保持购物车内容。 2. **工作原理**: - 当用户访问一个网站时,网站会将适当的信息存储在用户计算机上的Cookie文件中。 - 每当用户再次访问相同的网站时,浏览器会将存储在Cookie中的信息发送回给网站,以便网站可以识别用户并提供个性化服务或功能。 ![COOKIE的工作原理](http://flt-pan.58heshihu.com/blog/typecho/lsvl5boz.png) 3. **保护隐私**: - Cookie通常被用来提供个性化体验,但也可能对用户隐私构成潜在威胁。为此,现代浏览器提供了设置选项,让用户选择是否接受或拒绝Cookie,以便保护隐私。 总的来说,Cookie是一种在网站和用户之间交换信息的常见机制,被广泛用于提供更个性化和流畅的用户体验。 ### 设置COOKIE ```php setcookie ( $name, $value ,$expire , $path ,$domain ) ``` 说明: > 1)$name //cookie的名称 string/array 如设置:setcookie('c1[k1]', 值);读取:$_COOKIE['c1']['k1'] > 2)$value // cookie 的值 string ;而 session 的value没有限制可以是数组 > 3)$expire//过期时间,单位, 秒,当前时间戳加上秒数, time()+3600,//有效时间1小时. time()+604800,一周时间 > 4)$path . // 有效默认为当前根目录及所有的子目录有效路径, > 5)$domain // 有效域名. 默认为当前的域名, 如: www.abc.com **PS: setcookie() 函数之外,您还可以使用 header() 函数来设置 Cookie。它相对来说更底层,因为需要手动构建 Set-Cookie 头信息并发送给浏览器。这种方式相对复杂,一般情况下建议优先选择 setcookie() 函数。** > 拓展: > [设置cookie的三种方法](https://www.php.cn/faq/392673.html) ### 获取COOKIE的方法 在 PHP 中,获取 Cookie 的方法主要有两种: **使用 $_COOKIE 超全局数组:** PHP 中的 $_COOKIE 超全局数组用于获取客户端发送的 Cookie 值。当客户端向服务器发送请求时,其中包含了之前设置的 Cookie 值,这些值会存储在 $_COOKIE 超全局数组中。 通过 $_COOKIE['cookie_name'] 的方式可以直接获取特定 Cookie 的值。 **使用 $_SERVER 超全局数组:** 可以通过 $_SERVER 超全局数组中的 HTTP_COOKIE 变量来获取客户端发送的所有 Cookie。 您可以使用 $_SERVER['HTTP_COOKIE'] 访问所有的 Cookie 数据,然后根据需要解析其中的特定 Cookie 值。 ### 删除COOKIE的方法 #### 第一种:setcookie(‘名’,’’,time()-1); //将值设置过期 #### 第二种:setcookie(‘名’,’’); //将值设置为空 #### 第三种:setcookie(‘名’); //只设置cookie的名称 ### COOKIE的有效期 有两种存储类型的Cookie:会话性与持久性。Expires属性缺省时,为会话性Cookie,仅保存在客户端内存中,并在用户关闭浏览器时失效。 持久性Cookie会保存在用户的硬盘中,直至生存期到或用户直接在网页中单击“注销”等按钮结束会话时才会失效 。 ![lsvn2vsz.png](http://flt-pan.58heshihu.com/blog/typecho/lsvn2vsz.png) ## SESSION ### 什么是SESSION? 在 Web 开发中,"Session"(会话)是指在服务器端存储有关特定用户会话信息的一种方式,用于跟踪用户在网站上的状态和活动。与 Cookie 不同,Session 数据存储在服务器上而不是用户的计算机上,通常通过一个唯一的 session ID 来识别和管理每个用户的会话。 以下是关于 Web 会话的一些重要信息: 1. **工作原理**: - 当用户访问一个网站时,服务器会为该用户启动一个新的会话并分配一个唯一的 session ID。这个 session ID 通常以 Cookie 的形式发送给用户的浏览器,并在用户的每个请求中返回给服务器。 - 服务器会使用 session ID 来检索与特定用户相关的会话数据(如登录状态、购物车内容、用户偏好设置等),以便为用户提供个性化的体验。 ![SESSION的工作原理](http://flt-pan.58heshihu.com/blog/typecho/lsvmil7b.png) 2. **数据存储**: - 会话数据通常存储在服务器端的内存中或持久性的存储介质(如数据库)中。这使得服务器能够动态地跟踪和更新用户的会话信息。 3. **用途**: - 会话可用于跟踪用户的登录状态,以及在用户访问网站期间维护用户的状态。 - 可用于实现购物车功能、个性化内容展示和其他基于用户状态的操作。 4. **安全性**: - 与 Cookie 不同,Session 数据存储在服务器端,因此在安全性方面更可靠,用户无法直接访问或修改会话数据。 总的来说,Session是一种在服务器端跟踪用户状态和活动的机制,可实现个性化的用户体验并帮助网站动态地管理用户的状态信息。 ### 开启SESSION会话功能 ```php session_start(); //在设置和获取时必须要开启session. ``` 作用: 1.生成一个新的sessionid号 2.判断当前是否已经开启,如果已经开启则不会再生成一个新的id. 3.注意: 一个页面只能开启一次. ### 获取当前的SESSION的ID值 ```php session_id(); //echo session_id(); ``` ### 获取当前的SESSION的cookie名称 ```php session_name(); ``` ![lsymp7ye.png](http://flt-pan.58heshihu.com/blog/typecho/lsymp7ye.png) ### 删除SESSION数据 **unset** ![lsymuuhf.png](http://flt-pan.58heshihu.com/blog/typecho/lsymuuhf.png) **session_destroy()** ![lsymv32t.png](http://flt-pan.58heshihu.com/blog/typecho/lsymv32t.png) ### 如何彻底删除SESSION? 1)unset() //将变量销毁 2)session_destroy()//删除当前session文件 3)将session的id删除 (删除cookie) 4)setcookie(名,值,time()-99999);例如:setcookie(session_name(),session_id(),time()-999999); ### SESSION的垃圾回收 **什么是SESSION的垃圾回收?** 在用户非正确退出时,在服务器生成的session文件会一直存在. 时间一长,这样的文件越来越多. PHP引擎会将这部分文件按时间,按一定的比例进行删除. SESSION垃圾回收时间(session.gc_maxlifetime), //默认是1440, 即24分钟,文件超过24分钟没有再被访问,即为垃圾文件. 在php.ini中相关设置: 回收的概率(session.gc_probability, session.gc_divisor) session.gc_probability //默认为1 session.gc_divisor//默认为1000 ### SESSION相关配置 1.session.name = PHPSESSID 2.session.auto_start =0 关闭, 1为自动开启session (不建议自动开启) 3.session.cookie_lifetime=0 //代表浏览器关闭,会话结束 4.session.cookie_path=/ //指定了要session会话 cookie 的有效路径 5.session.cookie_domain //指定了要session会话 cookie 的有效域名 6. **脚本设置: 注意: 要在session_start()之前进行设置才有效.** a)ini_set('session.cookie_path', '/'); b)ini_set('session.cookie_domain', '.mydomain.com'); c)ini_set('session.cookie_lifetime', '1800'); ## SESSION和COOKIE的区别 1.存放的位置 2.安全性 3.网络传输量 4.生命周期 ![lsyn8sf7.png](http://flt-pan.58heshihu.com/blog/typecho/lsyn8sf7.png) ## 问题:如果用户将浏览器的cookie禁用,问session还能使用吗?为什么?如何解决? ### 处理方法: 自己来通过链接来传递session_id; **在链接上通过常量来设置:** ![lsynekvo.png](http://flt-pan.58heshihu.com/blog/typecho/lsynekvo.png) > SID //是PHP提供的常量 其值为 > Session的名称=session的id值 > 即: Session_name()=session_id() **处理页面:** ![lsynhjkx.png](http://flt-pan.58heshihu.com/blog/typecho/lsynhjkx.png) > 拓展: > [会话技术Cookie 和 Session](https://blog.csdn.net/weixin_50769390/article/details/127183135) 最后修改:2024 年 02 月 23 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏