• (八)cookieAndSession——PHP


    第八章 Cookie & Session

    1 Cookie

    Cookie是存储在客户端计算机上的文本文件,用于跟踪使用情况。PHP透明地支持HTTP Cookie。

    识别返回用户有三个步骤

    • 服务器脚本向浏览器发送一组cookie。例如姓名、年龄或身份证号码等。

    • 浏览器将此信息存储在本地计算机上以供将来使用。

    • 下次浏览器向web服务器发送任何请求时,它会将这些cookie信息发送给服务器,服务器会使用这些信息来识别用户

    1.1 设置Cookie

    PHP提供了setcookie()函数来设置cookie。此函数最多需要六个参数,应该在<html>标记之前调用。对于每个cookie,必须单独调用此函数。

    setcookie(name, value, expire, path, domain, security);
    
    • 1
    • Name − 这是设置cookie的名称,并存储在名为HTTP_cookie_VARS的环境变量中。访问Cookie时使用此变量。
    • Value − 这是设置命名变量的值,并且是实际要存储的内容。
    • Expiry − 这是指定自1970年1月1日00:00:00 GMT起的未来时间(秒)。在此时间之后,cookie将无法访问。如果未设置此参数,则cookie将在Web浏览器关闭时自动过期。
    • Path − 这是指定cookie有效路径。" / "字符允许cookie对所有路径有效。
    • Domain − 这可以用于在非常大的域中指定域名,并且必须至少包含两个句点才能有效。所有cookie仅对创建它们的主机和域有效。
    • Security − 这可以设置为1,以指定cookie只能通过使用HTTPS的安全传输发送,否则设置为0,这意味着cookie可以通过常规HTTP发送。
     
    	setcookie("username", "zhangsan", time()+3600, "/", "", 0);
    	setcookie("password", "123456", time()+3600, "/", "", 0);
     ?>
    
    • 1
    • 2
    • 3
    • 4
    1.2 访问Cookie

    PHP可以通过 C O O K I E 或 _COOKIE或 COOKIEHTTP_COOKIE_VARS来访问Cookie

     
    	setcookie("username", "zhangsan", time()+3600, "/", "", 0);
    	setcookie("password", "123456", time()+3600, "/", "", 0);
     ?>
    
     <?php 
     	//	isset():判断cookie是否存在
     	if(isset($_COOKIE["username"])){
     		echo $_COOKIE["username"]."
    "
    ; }else{ echo "Not recognized"; } echo $HTTP_COOKIE_VARS["password"] . "
    "
    ; ?>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    1.3 删除Cookie

    要删除一个cookie,使用name参数调用setcookie(),但这并不可靠。应该将cookie设置为已过期的日期是最安全的

     
    	setcookie("username", "zhangsan", time()-60, "/", "", 0);
     ?>
    
     <?php 
     	//	isset():判断cookie是否存在
     	if(isset($_COOKIE["username"])){
     		echo $_COOKIE["username"];
     	}else{
     		echo "Not recognized";
     	}
      ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    2 Session

    另一种使数据可以给整个网站的各个页面访问的方法是使用Session

    Session在服务器上的临时目录中创建一个文件,其中存储了注册的Session变量及其值。该数据将在访问期间提供给网站上的所有页面。

    临时文件的位置由被称为session.save_path文件名的php.ini文件所设置。在使用任何Session变量之前,请确保已设置此路径。

    当Session开始时,会执行以下步骤:

    • PHP首先为该特定会话创建一个唯一标识符,该标识符是32个十六进制数的随机字符串,如3c7foj34c3jj973hjkop2fc937e3443。

    • 一个名为PHPSESSID的cookie会自动发送到用户的计算机,以存储唯一的会话标识字符串。

    • 在服务器上指定的临时目录中自动创建一个文件,并带有以sess_ie sess_3c7foj34c3jj973hjkop2fc937e3443为前缀的唯一标识符的名称。

    • 当PHP脚本想要从会话变量中检索值时,PHP会自动从PHPSESSID cookie中获取唯一的会话标识符字符串,然后在其临时目录中查找具有该名称的文件,并通过比较两个值进行验证。

    • 当用户关闭浏览器或离开站点后,会话结束,服务器将在预定时间段(通常为30分钟)后终止会话。

    2.1 启动Session

    通过调用session_start()函数可以轻松启动PHPSession。此函数首先检查Session是否已启动,如果没有启动,则启动一个Session。建议将对session_start()的调用放在页面的开头。

    Session变量存储在名为$_Session[ ]的关联数组中。这些变量可以在Session的生存期内访问。

     
    	session_start();
    
    	// 使用isset()函数检查Session变量是否已设置。
    	if(isset($_SESSION['count'])){
    		$_SESSION['count'] += 1;
    	}else{
    		$_SESSION['count'] = 1;
    	}
    
    	echo "You have visited this page:".$_SESSION['count'];
     ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    2.2 销毁Session

    session_destroy()函数可以销毁PHPSession。此函数不需要任何参数,一次调用可以销毁所有Session变量。如果要销毁单个Session变量,则可以使用unset()函数来取消Session变量。

     
    	session_start();
    
    	// 使用isset()函数检查Session变量是否已设置。
    	if(isset($_SESSION['count'])){
    		$_SESSION['count'] += 1;
    	}else{
    		$_SESSION['count'] = 1;
    	}
    
    
    	//unset($_SESSION['count']);
    	session_destroy();
    
    
    	echo "You have visited this page:".$_SESSION['count'];
     ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    2.3 Turning on Auto Session

    您可以在php.ini文件中设置auto_start变量为1,那么当用户访问您的站点时,您不需要调用start_session()函数来启动会话。

    2.4 Session without cookies

    可能存在用户不允许在其机器上存储Cookie的情况。因此,还有另一种方法可以将Session的ID发送到浏览器。

    您可以使用Session启动时定义的常量SID。如果客户端未发送正确的会话cookie,其格式为session_name=session_id。否则,它将扩展为空字符串。因此,您可以无条件地将其嵌入到URL中。

  • 相关阅读:
    自动化运维?看看Python怎样完成自动任务调度⛵
    SpringSecurity 认证实战
    【统计模型】概率分布方法 之 事件与概率
    在Ubuntu 系统下开发GUI,用哪种开发工具比较好?
    qtdesigner的一些实用设置
    基于HTTP协议实现简易Web服务器
    Nginx配置虚拟主机
    在三维项目前端开发中用THREEMesh创建网格对象设置几何体和材质
    Git分支操作
    AI智能分析视频监控系统如何助力智慧民宿规范化、安全最大化?
  • 原文地址:https://blog.csdn.net/Mr_Morgans/article/details/127919706