zoukankan      html  css  js  c++  java
  • php第九天-session/cookice会话控制

    0x01 为什么使用会话技术

    “HTTP协议”是无状态协议
    HTTP协议不能告诉我们多请求是否是来自同一个人
    会话控制
    会话控制的思想就是允许服务器跟踪同一个客户端做出的连续请求

    0x02 会话跟踪的方式

    HTTP是无状态的协议,所以不能维护两个事物间的状态。但一个用户在请求一个页面以后再请求另一个页面时,需要让服务器知道这是一个用户。总共有3种数据传递方式。
    超链接或者header()函数等重定向方式
    使用Cookie将用户的信息状态,存放在客户端的计算机中。
    使用Session将用户的信息状态,存放在服务器之中。

    0x03 Cookie应用

    0x03.1 Cookie概述

    cookie是在http协议下,服务器或脚本可以维护客户端信息的一种方式。
    Cookie是一种由服务器发送给客户端的片段信息,存储在客户端浏览器的内存或者硬盘上。常用于保存用户名,密码,个性化设置,个人偏好记录等。当用户访问服务器时,服务器可以设置和访问cookie的信息。
    cookie保存在客户端,通常是IE或Firefox浏览器的cookie临时文件夹中,可以手动删除。注意:如果浏览器上cookie太多,超过了系统所允许范围,浏览器也会自动对它进行删除。

    0x03.2 设置Cookie

    设置Cookie
    语法:bool setcookie(string name,[string value,[int expire,[string path,[string domain,[int secure]]]]]);
    本cookie函数可以有6个属性,常用的有3个参数。

    <?php
    setcookie("username", "test", time()+30);	//30秒 
    echo "<pre>";
    var_dump($_COOKIE);
    ?>
    


    setcookie参数解释

    0x03.3 读取Cookie

    如果Cookie设置成功,客户端就拥有了Cookie文件,用来保存Web服务器为其设置的用户信息。
    在PHP中读取Cookie信息很简单,使用超全局数组$_COOKIE[‘cookie名’]即可获取cookie中的内容

    <?php 
        //输出Cookie中保存的所有用户信息 
        print_r($_COOKIE); 
    
    

    0x03.4 数组形态的Cookie应用

    数组也可以利用多维数组的形式,将多个内容值存储在相同Cookie名称标识符下。

    <?php
    setcookie("user[username][sex]","1");
    setcookie("user[username][name]","zhangsan");
    echo "<pre>";
    print_r($_COOKIE); 
    ?>
    

    0x03.5 删除Cookie

    有2种方式删除Cookie
    1.省略setcookie()函数的所有参数列
    2.设置cookie为已过期

    <?php 
           //只指定Cookie识别名称一个参数,即删除客户端中这个指定名称的Cookie资料   
           setCookie("user");                     //第一种方法 
    
           //设置Cookie 在当前时间过期,因此系统会自动删除识别名称为isLogin的Cookie 
           setCookie("user", "" , time()-1);  //第二种方法 
    

    0x03.6 基于Cookie的用户登录模块

    index.php

    <?php
    $action = isset($_GET['action']) ? $_GET['action'] :"";
    switch ($action) {
    	case 'login':
    		$username = isset($_POST['username']) ? $_POST['username'] : '';
    		$password = isset($_POST['password']) ? $_POST['password'] : '';
    		if(empty($username)){echo "请输入账户";die;}
    		if(empty($password)){echo "请输入密码";die;}
    		if($username == 'admin' && $password == 'admin'){
    			// $_COOKIE['username'] = 'admin';
    			// $_COOKIE['password'] = 'admin';
    
    			setcookie("username","admin",time()+180);
    			setcookie("password","admin",time()+180);
    			echo "<a href='./list.php'>登录成功</a>";die;
    		}else{
    			echo "密码错误";
    		}
    
    
    
    		break;
    	
    	default:
    		header('Location: ./login.php');
    		break;
    }
    
    ?>
    

    login.php

    <html>
         <head>
               <title>登录</title>
         </head>
         <body>
               <h2>login</h2>
               <form action="index.php?action=login" method="post">
                username: <input type="text" name="username" /> <br>
                password: 
                 <input type="password" name="password" /><br>
                 <input type="submit" value="submit" /> 
                </form>
         </body>
    </html>
    
    

    list.php

    <?php
    $username = isset($_COOKIE['username']) ? $_COOKIE['username'] : '';
    if(empty($username)) {echo "禁止操作"; die;}
    
    
    echo "欢迎进入";
    
    ?>
    

    0x04 Session的应用

    0x4.1 Session概述

    Session和Cookie相似,都是用来储存使用者的相关资料。但最大的不同之处在于Cookie是将数据存放在客户端的计算机之中,而Session则是将数据存放于服务器系统之下。

    cookie和session在php中的使用区别:
    cookie和session都可以暂时保存在多个页面中使用的变量,但是它们有本质的差别。
    cookie存放在客户端浏览器中,
    session保存在服务器上。
    它们之间的联系是session ID 一般保存在cookie中,或者放在URL上。
    禁用cookie的方法:
    点击IE中的“工具”—“Internet选项”,在弹出的对话框里点击“安全”—“自定义级别”项,将“允许每个对话COOKIE”设为禁用.

    0x4.2 配置Session

    php.ini文件和Session有关的几个常用配置选项
    session.auto_start = 0 ; 在请求启动时初始化session
    session.cache_expire = 180 ; 设置缓存中的会话文档在 n 分钟后过时
    session.cookie_lifetime = 0 ; 设置按秒记的cookie的保存时间, 相当于设置Session的过期时间,为0时表示直到浏览器被重启
    session.auto_start=1,这样就无需每次使用session之前都要调用session_start()。但启用该选项也有一些限制,如果确实启用了 session.auto_start,则不能将对象放入会话中,因为类定义必须在启动会话之前加载以在会话中重建对象

    session.cookie_path = / ; cookie的有效路径
    session.cookie_domain = ; cookie的有效域
    session.name = PHPSESSID; 用在cookie里的session的名字
    session.save_handler = files ; 用于保存/取回数据的控制方式
    session.save_path = /tmp ; 在 save_handler 设为文件时传给控制器的参数, 这是数据文件将保存的路径.
    session.use_cookies = 1 ; 是否使用cookies

    0x4.3 Session的声明与使用

    Session的设置不同于Cookie,必须先启动,在PHP中必须调用session_start()。
    session_start()函数的语法格式如下
    Bool session_start(void)
    注意:session_start()函数之前不能有任何输出
    Session以数组的形式使用
    如:$_SESSION[‘session名’]
    session_start(); //启动Session 的初始化
    $_SESSION["username"] = "yicunyiye"; //注册Session 变量,赋值为一用户名称
    $_SESSION["uid"] = 1; //注册Session 变量,赋值为一个用户的ID

    0x4.4 注册一个会话变量和读取Session

    在PHP中使用Session变量,除了要启动之外,还要经过注册的过程。注册和读取Session变量,都要通过访问$_SESSION数组完成。
    在$_SESSION关联数组中的键名具有和PHP中普通变量相同的命名规则。
    Session变量会被保存在服务器端的某个文件中,该文件的位置是通过php.ini文件,在session.save_path属性指定的目录下

    0x4.5 注销变量与销毁Session

    1.bool session_destroy(void)
    删除服务器端保留session信息的文件
    2.unset($_SESSION[‘键名’])
    删除内存中由Session数组保存的变量
    清除所有变量可以使用 $_SESSION=array()
    3.如果session是基于Cookie的,那么我们还需要删除客户端保留的cookie文件

    0x4.6 Session的自动回收机制

    php.ini中相关的配置
    session.cookie_lifetime=0; 关闭浏览器相应的cookie文件即被删除
    session.gc_maxlifetime;设置过期session时间,默认1440秒(24分钟)
    session.gc_probability/session.gc_divisor;启动垃圾回收机制的概率(建议值为1/1000~5000)

    0x4.7 传递Session ID

    1.通过Cookie传递Session ID
    相当于 setCookie(session_name(),session_id,0,’/’)
    2.通过URL 传递Session ID
    A、手动在页面中添加 session_name()和session_id()
    B、自动获取Session ID的方法
    1.Linux方式
    2.Windows方式

  • 相关阅读:
    开博客啦
    C语言 变长参数表的使用方法
    禅道程序员
    【转】函数式编程另类指南
    Servlet中JSP页面跳转的两种方法以及其区别
    《C程序设计语言》(学习笔记)——结构体
    C#保存wps和office表格.数据源为list<T>类型
    中国网建的短信接口实现
    C#保存wps和office表格.数据源为list<T>类型,
    MD5加密
  • 原文地址:https://www.cnblogs.com/yicunyiye/p/13740830.html
Copyright © 2011-2022 走看看