热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

session与cookie会话控制

1PHP的COOKIEcookie是一种在远程浏览器端储存数据并以此来跟踪和识别用户的机制。PHP在http协议的头信息里发送cookie,因此setcookie()函数必须在其它信息被输出到浏览器前调用,这和对header()函

1. PHP的COOKIE

COOKIE 是一种在远程浏览器端储存数据并以此来跟踪和识别用户的机制。

PHP在http协议的头信息里发送COOKIE, 因此 setCOOKIE() 函数必须在其它信息被输出到浏览器前调用,这和对 header() 函数的限制类似。

1.1 设置COOKIE:  (会话COOKIE 、 持久COOKIE)

可以用 setCOOKIE() 或 setrawCOOKIE() 函数来设置 COOKIE。也可以通过向客户端直接发送http头来设置.

1.1.1 使用setCOOKIE()函数设置COOKIE: 

bool setCOOKIE ( string name [, string value [, int expire [, string path [, string domain [, bool secure [, bool httponly]]]]]] )

name:   COOKIE变量名

value:   COOKIE变量的值

expire:  有效期结束的时间,

path:    有效目录,

domain: 有效域名,顶级域唯一

secure:  如果值为1,则COOKIE只能在https连接上有效,如果为默认值0,则http和https都可以.

httponly: 如果为1,则COOKIE只能通过HTTP协议来访问,而不能通过脚本来访问,很好的避免了XSS攻击。例子:

  1.  
  2.         $value = 'something from somewhere';  
  3.         setCOOKIE("TestCOOKIE"$value);  
  4.         setCOOKIE("TestCOOKIE"$value, time()+3600);  
  5.         setCOOKIE("TestCOOKIE"$value, time()+3600, "/~rasmus/"".example.com", 1);  
  6.         ?> 

设置多个COOKIE变量: setCOOKIE('var[a]','value'); 用数组来表示变量,但它的下标不用引号.(会自动加上下标,如果加上引号会出现重复或者可能会被转义,下标不可用)这样就可以用$_COOKIE['var']['a']来读取该COOKIE变量.

1.1.2. 使用header()设置COOKIE;

header("Set-COOKIE: name=$value[;path=$path[;domain=xxx.com[;...]]");

后面的参数和上面列出setCOOKIE函数的参数一样.比如:

$value = 'something from somewhere';

header("Set-COOKIE:name=$value");

1.1.3. COOKIE 的存放位置

不同的浏览器保存COOKIE的位置都不一样,甚至保存格式都是不一样的。已IE和firefox为例:IE是把COOKIE保存在C:\Documents and Settings\用户名\COOKIEs中,每个COOKIE是一个txt文件,文件名是以“用户名@网站URL”命名的;firefox则是把COOKIE保存在C:\Documents and Settings\用户名\Application Data\Mozilla\Firefox\Profiles\随机目录,在目录下可以看到一个COOKIE.sqlite文件(firefox3.X版本),所有的COOKIE都是保存在这个文件中。

1.2 COOKIE的读取:

直接用php内置超级全局变量 $_COOKIE就可以读取浏览器端的COOKIE.

print $_COOKIE['TestCOOKIE'];

1.3 删除COOKIE

(1)只需把有效时间设为小于当前时间

(2)把值设置为空.

例如:  setCOOKIE("name","",time()-1);

用header()类似.

1.4 常见问题解决:

1) 用setCOOKIE()时有错误提示(headers already sent ...),可能是因为调用setCOOKIE()前面有输出或空格.也可能你的文档是从其他字符集转换过来,文档可能带有BOM签名(就是在文件内容添加一些隐藏的BOM字符).解决的办法就是使你的文档不出现这种情况.还有通过使用ob_start()函数有也能处理一点.

2) $_COOKIE受magic_quotes_gpc影响,可能自动转义

3) 使用的时候,有必要测试用户是否支持COOKIE

1.5 COOKIE工作机理:

 a) 当客户端初次请求服务器的时候,如果服务器端有设置COOKIE的语句,则服务器通过随着响应发送一个http的Set-COOKIE头,在客户端中设置一个COOKIE文件。

推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 分享css中提升优先级属性!important的用法总结
    web前端|css教程css!importantweb前端-css教程本文分享css中提升优先级属性!important的用法总结微信门店展示源码,vscode如何管理站点,ubu ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 使用python输入PDF编号自动下载freepatentsonline.com的文档#!usrbinenvpython3#codingutf-8#Version:python3. ... [详细]
  • python之poc编写——sql篇
    文章目录sql注入漏洞漏扫单个网站基础sql扫描多个网站sql基础扫描时间盲注型扫描升阶版sq ... [详细]
  • JavaWeb介绍概念JavaWeb,是用Java技术来解决相关web互联网领域的技术总和。web包括:web服务器和web客户端两部分。Java在客户端的应用有javaapplet,不过使 ... [详细]
  • 校内无法访问IEEE等部分数据库的解决方案
    解决了校内无法访问IE ... [详细]
  • 2月4日每日安全热点节日期间某企远程办公遭XRed攻击 ... [详细]
  • 通过存储型XSS漏洞获取目标用户本地私钥信息
    运维|安全存储型XSS漏洞,目标用户,本地,私钥信息运维-安全舍得网源码,vscode代码检查工具,ubuntu壁纸修改,tomcat网页部署项目,爬虫枯木,php采集文件,马鞍山 ... [详细]
  • JDK1.7及之前的JMM先看一张图,很清晰的说明了JAVA内存结构布局:JAVA内存结构主要分为三大块:堆内存、方法区和栈。堆内存是JVM中最大的一块内存,由年轻代和老年代组成。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • Oracle10g备份导入的方法及注意事项
    本文介绍了使用Oracle10g进行备份导入的方法及相关注意事项,同时还介绍了2019年独角兽企业重金招聘Python工程师的标准。内容包括导出exp命令、删用户、创建数据库、授权等操作,以及导入imp命令的使用。详细介绍了导入时的参数设置,如full、ignore、buffer、commit、feedback等。转载来源于https://my.oschina.net/u/1767754/blog/377593。 ... [详细]
author-avatar
雪灵女子_826
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有