php cookie使用方法学习笔记分享


Posted in PHP onNovember 07, 2013

PHP setcookie() 函数向客户端发送一个 HTTP cookie。cookie 是由服务器发送到浏览器的变量。cookie 通常是服务器嵌入到用户计算机中的小文本文件。每当计算机通过浏览器请求一个页面,就会发送这个 cookie。cookie 的名称指定为相同名称的变量。例如,如果被发送的 cookie 名为 "name",会自动创建名为 $user 的变量,包含 cookie 的值。

必须在任何其他输出发送前对 cookie 进行赋值。如果成功,则该函数返回 true,否则返回 false。

1 setcookie(name, value, expire, path, domain, secure)
•name 必需。规定 cookie 的名称。
•value 必需。规定 cookie 的值。
•expire 可选。规定 cookie 的有效期。
•path 可选。规定 cookie 的服务器路径。
•domain 可选。规定 cookie 的域名。
•secure 可选。规定是否通过安全的 HTTPS 连接来传输 cookie。
可以通过 $HTTP_COOKIE_VARS["user"] 或 $_COOKIE["user"] 来访问名为 "user" 的 cookie 的值。在发送 cookie 时,cookie 的值会自动进行 URL 编码。接收时会进行 URL 解码。如果你不需要这样,可以使用 setrawcookie() 代替。

例,php设置和获取cookie

setcookie('mycookie','value');
//函数原型:int setcookie(string name,string value,int expire,string path,string domain,int secure)
echo($mycookie);
echo($HTTP_COOKIE_VARS['mycookie']);
echo($_COOKIE['mycookie']);

删除Cookie

(1)调用只带有name参数的setcookie();
(2)使失效时间为time()或time-1;

<?php setcookie('name'); ?>
setcookie('mycookie');或setcookie('mycookie','');或setcookie("mycookie",false);
//setcookie('mycookie','',time()-3600);
echo($HTTP_COOKIE_VARS['mycookie']);
print_r($_COOKIE);

建议删除方法:

setcookie('mycookie','',time()-3600);

PHP提供一个很好用的函数mktime()。
你只要按顺序传送给mktime()你希望表示的小时,分钟,秒数,月份,日期,及年份,
mktime()就会返回该日期自1970年1月1日的总秒数。
因此,如果需要模拟 Y2K 问题:

$y2k = mktime(0,0,0,1,1,2000);
setcookie('name','value',$y2k);
setcookie('name', 'value', time+3600);
setcookie('name', 'value', $y2k, '~/myhome', '.domain.com');

获取COOKIE过期时间的办法

$expire = time() + 86400; // 设置24小时的有效期
setcookie ("var_name", "var_value", $expire); // 设置一个名字为var_name的cookie,并制定了有效期
setcookie ("var_name_expire", $expire, $expire); // 再将过期时间设置进cookie以便你能够知道var_name的过期时间

注:

在发送 cookie 时,cookie 的值会自动进行 URL 编码。接收时会进行 URL 解码。
如果你不需要这样,可以使用 setrawcookie() 代替。

例,cookie来保存用户登录信息

1、数据库连接配置页面:connectvars.php

<?php
//数据库的位置
define('DB_HOST', 'localhost');
//用户名
define('DB_USER', 'root');
//口令
define('DB_PASSWORD', '19900101');
//数据库名
define('DB_NAME','test') ;
?>

2、登录页面:logIn.php

<?php
//插入连接数据库的相关信息
require_once 'connectvars.php';
$error_msg = "";
//判断用户是否已经设置cookie,如果未设置$_COOKIE['user_id']时,执行以下代码
if(!isset($_COOKIE['user_id'])){
    if(isset($_POST['submit'])){//判断用户是否提交登录表单,如果是则执行如下代码
        $dbc = mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME);
        $user_username = mysqli_real_escape_string($dbc,trim($_POST['username']));
        $user_password = mysqli_real_escape_string($dbc,trim($_POST['password']));
        if(!empty($user_username)&&!empty($user_password)){
            //MySql中的SHA()函数用于对字符串进行单向加密
            $query = "SELECT user_id, username FROM mismatch_user WHERE username = '$user_username' AND "."password = SHA('$user_password')";
            //用用户名和密码进行查询
            $data = mysqli_query($dbc,$query);
            //若查到的记录正好为一条,则设置COOKIE,同时进行页面重定向
            if(mysqli_num_rows($data)==1){
                $row = mysqli_fetch_array($data);
                setcookie('user_id',$row['user_id']);
                setcookie('username',$row['username']);
                $home_url = 'loged.php';
                header('Location: '.$home_url);
            }else{//若查到的记录不对,则设置错误信息
                $error_msg = 'Sorry, you must enter a valid username and password to log in.';
            }
        }else{
            $error_msg = 'Sorry, you must enter a valid username and password to log in.';
        }
    }
}else{//如果用户已经登录,则直接跳转到已经登录页面
    $home_url = 'loged.php';
    header('Location: '.$home_url);
}
?>
<html>
    <head>
        <title>Mismatch - Log In</title>
        <link rel="stylesheet" type="text/css" href="style.css" />
    </head>
    <body>
        <h3>Msimatch - Log In</h3>
        <!--通过$_COOKIE['user_id']进行判断,如果用户未登录,则显示登录表单,让用户输入用户名和密码-->
        <?php
        if(empty($_COOKIE['user_id'])){
            echo '<p class="error">'.$error_msg.'</p>';
        ?>
        <!-- $_SERVER['PHP_SELF']代表用户提交表单时,调用自身php文件 -->
        <form method = "post" action="<?php echo $_SERVER['PHP_SELF'];?>">
            <fieldset  style="width:250px;">
                <legend>Log In</legend>
                <label for="username">Username:</label>
                <!-- 如果用户已输过用户名,则回显用户名 -->
                <input type="text" id="username" name="username"
                value="<?php if(!empty($user_username)) echo $user_username; ?>" />
                <br/>
                <label for="password">Password:</label>
                <input type="password" id="password" name="password"/>
            </fieldset>    
            <br/>
            <input type="submit" value="Log In" name="submit"/>
        </form>
        <?php
        }
        ?>
    </body>
</html>

3、登入页面:loged.php

<?php
//已登录页面,显示登录用户名
if(isset($_COOKIE['username'])){
    echo 'You are Logged as '.$_COOKIE['username'].'<br/>';
    //点击“Log Out”,则转到logOut.php页面进行cookie的注销
    echo '<a href="logOut.php"> Log Out('.$_COOKIE['username'].')</a>';
}
/**在已登录页面中,可以利用用户的cookie如$_COOKIE['username']、
 * $_COOKIE['user_id']对数据库进行查询,可以做好多好多事情*/
?>

4、注销cookie页面:logOut.php(注销后重定向到lonIn.php)

<?php
/**cookies注销页面*/
if(isset($_COOKIE['user_id'])){
    //将各个cookie的到期时间设为过去的某个时间,使它们由系统删除,时间以秒为单位
    setcookie('user_id','',time()-3600);
    setcookie('username','',time()-3600);
}
//location首部使浏览器重定向到另一个页面
$home_url = 'logIn.php';
header('Location:'.$home_url);
?>

最后总结三点,大家必须留意

1: 设置cookie时的注意事项

在同一个页面中设置cookie,实际上是按从后往前的顺序进行的.如果要先删除一个cookie,再写入一个cookie,则必须先写写入语句,再写删除语句.否则会出现错误.

2: setcookie举例

简单的: setcookie("mycookie","value_of_mycookie");
带失效时间的: setcookie("withExpire","Expire_in_1_hour",time()+3600);
什么都有的:setcookie("FullCookie","Full_cookie_value",time+3600,"/forum","3water.com",1);

3: cookie的一些特点

cookie是面向路径的.缺省path属性时,WEB服务器页会自动传递当前路径给浏览器.指定路径会强制服务器使用设置的路径.
在一个目录页面里设的cookie在另一个目录的页面里是看不到的.

PHP 相关文章推荐
PHP脚本的10个技巧(2)
Oct 09 PHP
使用PHP的日期与时间函数技巧
Apr 24 PHP
PHP下操作Linux消息队列完成进程间通信的方法
Jul 24 PHP
php通用防注入程序 推荐
Feb 26 PHP
php中一个有意思的日期逻辑处理
Mar 25 PHP
destoon文章模块调用企业会员资料的方法
Aug 22 PHP
yii的CURD操作实例详解
Dec 04 PHP
腾讯微博提示missing parameter errorcode 102 错误的解决方法
Dec 22 PHP
浅析iis7.5安装配置php环境
May 10 PHP
PHP SPL标准库之接口(Interface)详解
May 11 PHP
浅析Yii2集成富文本编辑器redactor实例教程
Apr 25 PHP
php 如何禁用eval() 函数实例详解
Dec 01 PHP
PHP 5.5 创建和验证哈希最简单的方法详解
Nov 07 #PHP
php使用mb_check_encoding检查字符串在指定的编码里是否有效
Nov 07 #PHP
PHP中spl_autoload_register函数的用法总结
Nov 07 #PHP
php去除HTML标签实例
Nov 06 #PHP
php实现监听事件
Nov 06 #PHP
php生成扇形比例图实例
Nov 06 #PHP
php多用户读写文件冲突的解决办法
Nov 06 #PHP
You might like
php 定义404页面的实现代码
2012/11/19 PHP
PHP实现采集中国天气网未来7天天气
2014/10/15 PHP
php基本函数汇总
2015/07/09 PHP
laravel unique验证、确认密码confirmed验证以及密码修改验证的方法
2019/10/16 PHP
JS实现悬浮移动窗口(悬浮广告)的特效
2013/03/12 Javascript
基于Unit PNG Fix.js有时候在ie6下不正常的解决办法
2013/06/26 Javascript
jQuery父级以及同级元素查找介绍
2013/09/04 Javascript
控制input输入框中提示信息的显示和隐藏的方法
2014/02/12 Javascript
JavaScript实现ASC转汉字及汉字转ASC的方法
2016/01/23 Javascript
详解Angularjs中的依赖注入
2016/03/11 Javascript
JS 面向对象之继承---多种组合继承详解
2016/07/10 Javascript
js自制图片放大镜功能
2017/01/24 Javascript
基于JS实现二维码图片固定在右下角某处并跟随滚动条滚动
2017/02/08 Javascript
js使用highlight.js高亮你的代码
2017/08/18 Javascript
vue-cli的eslint相关用法
2017/09/29 Javascript
微信小程序用户拒绝授权的处理方法详解
2019/09/20 Javascript
vue 解决文本框被键盘遮住的问题
2019/11/06 Javascript
Nuxt默认模板、默认布局和自定义错误页面的实现
2020/05/11 Javascript
vue项目中播放rtmp视频文件流的方法
2020/09/17 Javascript
JS数组索引检测中的数据类型问题详解
2021/01/11 Javascript
Python安装Imaging报错:The _imaging C module is not installed问题解决方法
2014/08/22 Python
利用python对Excel中的特定数据提取并写入新表的方法
2018/06/14 Python
python 将list转成字符串,中间用符号分隔的方法
2018/10/23 Python
python 实现读取一个excel多个sheet表并合并的方法
2019/02/12 Python
Python实现中值滤波去噪方式
2019/12/18 Python
Python confluent kafka客户端配置kerberos认证流程详解
2020/10/12 Python
使用CSS3的box-sizing属性解决div宽高被内边距撑开的问题
2016/06/28 HTML / CSS
使用css实现android系统的loading加载动画
2019/07/25 HTML / CSS
CSS3中新增的对文本和字体的设置
2020/02/03 HTML / CSS
Superdry极度干燥美国官网:英国制造的服装品牌
2018/11/13 全球购物
Interhome丹麦:在线预订度假屋和公寓
2019/07/18 全球购物
人事行政主管岗位职责
2013/12/22 职场文书
先进事迹报告会感言
2014/01/24 职场文书
无故旷工检讨书
2014/01/26 职场文书
2014应届本科生自我评价
2014/09/13 职场文书
Python访问Redis的详细操作
2021/06/26 Python