日期:2014-05-17  浏览次数:20425 次

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'] .
            "&nbsp;&nbsp;&nbsp;&nbsp;<a href='11quit.php'>退出</a>";
    
} 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'] .
            "&nbsp;&nbsp;&nbsp;&nbsp;<a href='21quit.php'>退出</a>";
            
        }
    }
}

if(!( isset($_SESSION['islogin']) &&  $_SESSION['islogin'] == 1 ) ){
    $html .= '<a href="20.php">请登录</a>';
} 

$html .= "<br><h1>这是首页<h1>";
echo $html;




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

session_start();

$isget = ($_SERVER['REQUEST_METHOD'] == 'GET') ? 1 : 0;
if ($isget) {
    $html = <<<longs
<html>    
<body>
  <form method="post">
    请输入用户名:<input type="text" name="username" value=''><br>
    请输入密码:<input type="text" name="password" value=''><br>
    <input type="checkbox" name="rememberme" value="1" />下次自动登录<br>
    <input type="submit" value="登录" >
  </form>
</body>  
</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;
        
        setco