• 回话处理程序(17)


    配置指令

    • 管理会话存储介质

    确定如何存储会话信息

     session. save_handler = files(平面文件)mm(共享内存)sqlite(SQLite数据库)user(自定义)

    • 设置会话文件路径

     如果session.save_handler = files,则session.save_path必须指向存储目录

    • 自动启用会话

     session.auto_start = 1 开启自动启动会话

    • 设置会话名称

     session.name = string 设置会话名字

    • 选择cookie或URL重写

     session.use_cookies = 0 将使用URL重写

     如果session.use_cookie被禁用,用户唯一的SID必须要附在URL后面,需要手动添加

    • 自动URL重写

    session.use_trans_sid = 1 自动将用户SID变量附加到每个URL后面

    • 设置会话cookie的生存期

     session.cookie_lifetime = 0 确定会话cookie的有效期默认为永久(0秒)

    • 设置会话cookie的有效URL路径

     session.cookie_path = string 确定cookie在那个路径中是有效的

    • 设置会话cookie的有效域

    session.cookie_damain = string 确定cookie在那个域有效

    若忽略对此指令设置,则cookie的域被设为生成他的服务器主机名

    session.cookie_damian = www.xiukang.com

    如果网址子域中使用会话,比如:abc.xiukang.com、sear.xiukang.com、red.xiukang.com

    session.cookie_damian = .xiukang.com

    • 使用referer来验证会话

    如果使用URL重写来传播会话ID,就可以通过复制和散播URL来查看某个会话内容

    session.referer_check = string 指令来减少这种可能性,它可以指定一个用于验证每位用户的字串,如果没有此字串,SID将失效

    • 为启用会话的页面设置缓存方向

    (。。。)

    处理会话

    • 开始会话

     session_start()函数

    HTTP会忘记用户过去或将来的环境,所以需要session_start()函数每次请求显示的启动或恢复会话

    函数session_start()创建新会话(未找到SID)或继续当前对话(存在SID),这取决于是否拥有SID

    只需如下调用该函数

    session_start();
    • 销毁会话

     session_unset()函数清楚存储在当前会话中的所有会话变量,但不会从存储机制中完全删除对话

    session_destroy()函数可以从存储机制中完全删除对话,使当前会话失效

    如果不想在会话结束后使用cookie,需要将php.ini文件中session.cookie_lifetime设置为0(默认)

    • 设置和获取会话ID

     虽然PHP可以自动创建和传播SID,但有时希望手动设置和获取这个ID,函数session_id()可以完成这个任务

    函数session_id()可以设置和获得SID,如果没有参数则获取当前SID,如果有参数,该参数就是SID

    session_start();//创建一个新的会话
    echo session_id();//输出SID:gc9lu35rda4ttse59lc07mgbup 
    • 创建和删除会话变量

     会话变量用来管理用户一起从一个页面到下一个页面的数据

    就像对待其他变量一样设置和删除会话变量,不过需要在$_SESSION超级全局上下文中引用这些变量

    session_start();//创建会话
    $_SESSION["username"] = "user";
    echo $_SESSION["username"];

    可以使用unset()函数删除变量

    session_start();//创建会话
    $_SESSION["username"] = "user";
    echo $_SESSION["username"];
    unset($_SESSION["username"]);//unset()函数删除变量
    • 编码和解码会话数据

     PHP会自动处理会话的编码和解码

    编码会话数据(手动)

    session_encode()

    //创建新会话
    session_start();
    //设置一下会话变量
    $_SESSION["name"] = "xiu";
    $_SESSION["age"] = "25";
    //编码所有会话数据为一个字符串并返回结果
    $sessionVar= session_encode();
    echo $sessionVar;//返回:name|s:3:"xiu";age|s:2:"25"; 

    解码会话数据(手动)

    session_decode()

    session_start();//创建新会话
    $_SESSION["name"] = "xiu";//设置一下会话变量
    $_SESSION["age"] = "25";
    $sessionVar = session_encode();//编码所有会话数据为一个字符串并返回结果
    session_decode($sessionVar);//解码当前编码的会话
    echo $_SESSION["name"];//xiu
    echo $_SESSION["age"];//25

    实际的会话处理实例

    • 以返回用户身份自动登陆

     MySQL表

    create table users (
        id integer not null auto_increment,
        first_name varchar(255) not null,
        user_name varchar(255) not null,
        primary key(id)
    )

    HTML表单

    <form action="index.html" method="post">
        <p>username:</p>
        <input type="text" name="username" />
        <p>password:</p>
        <input type="password" name="password"/><br/><br/>
        <input type="submit" value="GO">
    </form>

    PHP管理自动登陆代码

    session_start();
    if(!isset($_SESSION["username"])){//判断之前是否发起会话
        if(isset($_POST["username"])){//判断之前是否登陆过
            $mysqli = new mysqli("localhost","root","123","test");//链接数据库
            $stmt = $mysqli -> prepare("select first_name from users where user_name = ? and password = ? ");//创建查询语句
            $stmt -> bind_param("ss",$_POST["username"],$_POST["password"]);//绑定参数
            $stmt -> execute();//执行语句
            $stmt -> store_result();//
            if($stmt -> num_rows == 1){//数据库响应1条数据
                $stmt -> bind_result($firstsname);//
                $stmt -> fetch();//
                $_SESSION["first_name"] = $firstsname;//绑定结果参数
                echo $_SESSION["first_name"];//
            }else {
                require_once("index.html");//
                echo "密码错误";//
            }
    
        }else {
            require_once("index.html");//
        }
    }else {
        echo "登陆成功";//
    }
    • 生成最近浏览文档的索引

    创建定制会话处理程序

    • 将定制会话函数假如到PHP逻辑
    • 使用基于MySQL的定制会话处理程序
  • 相关阅读:
    【luogu】 P1433 吃奶酪
    【noip 2016】 组合数问题(problem)
    【清北学堂】 死亡(death)
    【noip 2004】 合并果子
    微信小程序:每个邮箱仅能申请一个小程序
    Babel-polyfill 的作用
    react.js中模拟事件总线,子组件调用父组件时,发挥作用
    多行文本溢出显示省略号(…) text-overflow: ellipsis ------------- webkit-line-clamp 多行文字溢出...
    es6-class
    ES6--promise
  • 原文地址:https://www.cnblogs.com/xiukang/p/8569929.html
Copyright © 2020-2023  润新知