热搜:NVER 

php基础知识(四)-cookie使用

2024-04-26 12:50:01
 php基础知识(四)-cookie使用

php基础知识(4)-cookie使用
php基础知识-cookie使用

示例代码下载页http://xieye.iteye.com/blog/1336095(在附件)

cookie简单定义:浏览器发送请求给服务器时额外传送的数据。

cookie原理:web协议规定,服务器返回请求时可以将一小部分数据存在浏览器客户端,浏览器在下次往同域名服务器请求信息时,会
同时自动把该段信息再发送给服务器,而这一切是对用户透明的,用户不需要理解这些东西可以照常上网。
cookie的一个特点是,服务器存客户端时可以带有时间参数,浏览器会根据这个参数决定cookie是否过期来处理,如果过期了,这个cookie就
不会到服务端。
假如服务端不对cookie做处理,则每次浏览器发送请求到服务端总会自动传送相同内容的cookie。
cookie的另一个特点是多个名称和值的组合。

例子:自动登录。
有3个页面,一个首页,一个是登录页

必须先添加一个用户
insert into test.member(username,password)values('admin', md5('1') );

9.php,10.php,11quit.php 是没有自动登录的例子。

19.php,20.php,21quit.php 是自动登录的例子。

演示
首先是一个普通的登录例子
http://localhost/command/peixun/cookie/9.php,提示登录
进入10.php,输入admin,1则跳转到9.php,显示出当前用户名,如果愿意可以退出。
如果没有点击“退出”按钮,则直接关闭浏览器,再打开浏览器输入http://localhost/command/peixun/cookie/9.php,发现并没有处于登录状态。


然后是一个通过cookie的自动登录例子。
http://localhost/command/peixun/cookie/19.php,提示登录
进入10.php发现多了一个复选框,不勾选的情况下和上面的例子效果完全一样,输入admin,1则跳转到19.php,显示出当前用户名,如果愿意可以退出。
如果勾选后输入admin,1则跳转到19.php,此时不能点击“退出”链接,直接关闭浏览器。
双击桌面的浏览器图标再次打开浏览器,发现处于已登录状态,这就是cookie的效果。

重要说明:本例子只用于演示cookie的用法,实际应用中为安全起见,最好隐藏cooikie的字段含义,程序也因此需要做修改。

代码可下载,只显示第2个例子的代码

19.php

<?php
//会话的第2个例子,首页

//9.php,简单例子,首页
//10.php,简单例子,登录页
//11quit.php,简单例子,退出页
//19.php,     复杂例子,首页
//20.php,    复杂例子,登录页
//21quit.php, 复杂例子,退出页

require_once('../Public/CommandLine.php');

session_start();

//逻辑是如果未登录,则显示“请登录”,如果已登录,显示欢迎某某某
$html = '';
if (isset($_SESSION['islogin']) &&  $_SESSION['islogin'] == 1  ) { //已登录
    $html .= '欢迎您,' . $_SESSION['username'] .
            "    退出";
    
} else { //未登录分:有cookie的记住我,且为1
    if (isset($_COOKIE['rememberme']) &&  $_COOKIE['rememberme']==1 ) {
        $username = strval($_COOKIE['username']);
        $password = strval($_COOKIE['password']);
        $db = Sys::getdb();
        $select = $db->select();
        $select->from('test.member', 'count(*)'   )
               ->where('username=?', $username)
               ->where('password=?', $password);
        $result = $db->fetchOne($select);
        if ($result) { //如果是对的
            $_SESSION['islogin'] = 1;
            $_SESSION['username'] = $username;
            
            $html .= '欢迎您,' . $_SESSION['username'] .
            "    退出";
            
        }
    }
}

if(!( isset($_SESSION['islogin']) &&  $_SESSION['islogin'] == 1 ) ){
    $html .= '请登录';
} 

$html .= "

这是首页

"; echo $html;




20.php
<?php
//自动登录的登录页
require_once('../Public/CommandLine.php');

session_start();

$isget = ($_SERVER['REQUEST_METHOD'] == 'GET') ? 1 : 0;
if ($isget) {
    $html = <<    

  
请输入用户名:
请输入密码:
下次自动登录
longs; echo $html; } else { //echo $_POST['name1']; $username = $_POST['username']; $password = $_POST['password']; $db = Sys::getdb(); $select = $db->select(); $select->from('test.member', 'count(*)' ) ->where('username=?', $username) ->where('password=?', md5($password)); $result = $db->fetchOne($select); if ($result) { $_SESSION['islogin'] = 1; $_SESSION['username'] = $username; $time = time() + 3600 * 24 * 365; setcookie('rememberme', intval($_POST['rememberme']), $time, "/"); setcookie('password', md5($password), $time, "/"); setcookie('username', $username, $time, "/"); header('Location: 19.php'); }else { $html = << 请输入正确的用户名和密码
请输入用户名:
请输入密码:
下次自动登录
longs; echo $html; } }


21quit.php
<?php
//第2个例子,自动登录的退出页
require_once('../Public/CommandLine.php');

session_start();

$_SESSION['islogin'] =0;
$date = time() - 3600 * 24 * 365;
foreach($_COOKIE as $key => $ko){
    if ($key != 'PHPSESSID') {
        setcookie($key, "", $date, "/"); //删除cookie的写法
    }
}
header('Location: 19.php');