仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1526|回复: 18
打印 上一主题 下一主题

[学习教程] PHP网页编程之PHP中cookies指南

[复制链接]
金色的骷髅 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:27:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
咱们就开始学习动态语言的概念吧,刚一接触动态语言,可能很多人都会蒙了,怎么这乱七八糟的东西,在网页里显示的时候却是另外一码事?其实这并不算乱七八糟,你写的HTML代码不也一样是一堆堆的字符吗?毕竟,代码并不是作为直接输出的,而是经过处理的,说白了,HTML是经过HTML解析器,而PHP当然也就通过PHP解析器了,跟学习HTML一样的道理,想让任何的解析器完成操作,就必须使用它们专用的语法结构,所以PHP长相奇怪也就不足为奇了。cookie|cookies   综述

Cookie是在HTTP协定下,办事器或剧本可以保护客户任务站上信息的一种体例。Cookie是由Web办事器保留在用户阅读器上的小文件,它可以包括有关用户的信息(如身份辨认号码、暗码、用户在Web站点购物的体例或用户会见该站点的次数)。不管什么时候用户链接到办事器,Web站点都可以会见Cookie信息。

  如何设置cookies?

在PHP中可使用setcookie函数设置一个cookie。cookie是 HTTP标头的一局部, 因而设置cookie功效必需在任何内容送到阅读器之前。这类限制与header()函数一样。任何从客户端传来的cookie将主动地转化成一个PHP变量。PHP获得信息头并剖析, 提取cookie名并酿成变量。因而,假如设置cookie如setcookie("mycookie","Cookies")php将主动发生一个名为$mycookie,值为"Cookies"的变量。

咱们来看一下setcookie函数语法:

init setcookie(string CookieName,string CookieValue,int CookieExpireTime,path,domain,int secure);

参数申明:

PATH:暗示web办事器上的目次,默许为被挪用页面地点目次

DOMAIN:cookie可使用的域名,默许为被挪用页面的域名。这个域名必需包括两个".",所以假如你指定你的顶级域名,你必需用".mydomain.com"

SECURE:假如设为"1",暗示cookie只能被用户的阅读器以为是平安的办事器所记住.

cookies利用举例

假定咱们有如许一个需求注册的站点,它主动辨认用户的身份并停止相干的操作:假如是已注册的用户,发送给他信息;假如不是已注册的用户,则显示一个注册页面的链接。

依照下面的请求,咱们先创立数据库用来保留注册用户的信息:名字(first name),姓(last name),Email地址(email address),计数器(visit counter)。

先按上面步调建表:

mysql> create database users;
Query OK, 1 row affected (0.06 sec)
mysql> use users;
Database changed
mysql> create table info (FirstName varchar(20), LastName varchar(40), email varchar(40), count varchar(3));
Query OK, 0 rows affected (0.05 sec)



然后建一个php页面临照数据库反省cookies。

因为php能转换可辨认的cookie为响应的变量,所以咱们能反省一个名为"myCookies" 的变量:

<? if (isset($myCookies)) { // 假如Cookie已存在
……
} else { //假如Cookie不存在
……
}
?>

当cookie存在时,咱们履行上面步调:

起首获得cookie值,用explode函数剖析成分歧的变量,增添计数器,并设一个新cookie:

$info = explode("&", $myCookies);
……
$count++;
$CookieString=$FirstName.'&'.$LastName.'&'.$email.'&'.$count;
SetCookie ("myCookies",$CookieString, time()+3600); //设置cookie

接着用html语句输入用户信息。

最初,用新的计数器值更新数据库。

假如这个cookie不存在,咱们显示一个注册页(register.php)的链接。

上面的register.php是用户注册页面:

/* register.php */
<form method="post" action="regOK.php">
First Name:<input type="text" name="FirstName">
Last Name:<input type="text" name="LastName">
<input type="submit" value="注册">
</form>

用户在register.php注册页面填写的信息提交给regOK.php:

/* regOK.php */
if ($FirstName and $LastName and $email) {
……//在数据库查询用户是不是存在
}
}else{
……//毛病处置
}




下面的法式流程以下:

起首反省一切的信息是不是按请求填写,假如没有,前往从头输出

假如一切信息填好,起首,咱们从数据库中取回用户登录具体材料

mysql_connect() or die ("毗连数据库呈现毛病!");
$query="select * from info where FirstName='$FirstName' and LastName='$LastName' and email='$email'";
$result = mysql_db_query("users", $query);
$info=mysql_fetch_array($result);
$count=$info["count"];

反省数据库是不是有如许一个用户,假如有,它指定旧的信息,并用以后的信息建一新的cookie,假如统一用户没无数据库登录,新建一数据库登录,并建一新的cookie。

如今使用isset()函数反省用户是不是有计数器,假如有则计数器增添而且创立一个新的cookie:

$count++; //增添计数器
$CookieString=$FirstName.'&'.$LastName.'&'.$email.'&'.$count;
SetCookie ("myCookies",$CookieString, time()+3600);

假如没有一用户计数器,在mysql中加一纪录,并设一cookie

注重:挪用setcookie函数之前应当没有任何数据输入倒阅读器,不然将会呈现毛病。

  若何完成跨域名Cookie?

  从Cookie标准上说,一个cookie只能用于一个域名,因而,假如在阅读器中对一个域名设置了一个cookie,那末这个cookie关于其它的域名将有效。

  上面咱们来谈一个跨域名cookie的完成计划:

第一步:创立预置剧本

  将上面的代码加到预置剧本中(或呈现在一切剧本之前的函数中)。

    <?php
    /*假如GET变量已设置了,而且它与cookie变量分歧
     *则利用get变量(更新cookie)
     */
    global $HTTP_COOKIE_VARS, $HTTP_GET_VARS;
    if (isset($sessionid) && isset($HTTP_GET_VARS['sessionid']) && ($HTTP_COOKIE_VARS['sessionid'] != $HTTP_GET_VARS['sessionid'])) {
      SetCookie('sessionid', $HTTP_GET_VARS['sessionid'], 0, '/', '');
      $HTTP_COOKIE_VARS['sessionid'] = $HTTP_GET_VARS['sessionid'];
      $sessionid = $HTTP_GET_VARS['sessionid'];
    }
    ?>

这个代码运转以后,一个全局变量'sessionid'将可以用于剧本。它将保留用户的cookie中的sessionid值,或是经由过程GET恳求发来的sessionid值。

第二步:为一切的穿插域名援用利用变量

  创立一个全局的设置装备摆设文件,用于寄存可以停止切换的域名的根基援用模式。例如,假如咱们具有domain1.com和domain2.com,则以下设置:

    <?php
    $domains['domain1'] = "http://www.domain1.com/-$sessionid-";
    $domains['domain2'] = "http://www.domain2.com/-$sessionid-";
    ?>

  咱们写如许一段代码:

    <?php
    echo "Click <a href="", $domains['domain2'], "/contact/?email=yes">here</a> to contact us.";
    ?>

  下面的代码将发生以下的输入:

    Click <a href="http://www.domain2.com/-66543afe6543asdf6asd-/contact/?email=yes">here</a> to contact us.

  在这里sessionid已被拔出到URL中去了。

第三步:设置装备摆设Apache

  如今,咱们来设置装备摆设Apache来重写这个URL。

  咱们需求将
    http://www.domain2.com/-66543afe6543asdf6asd-/contact/
  酿成如许:
    http://www.domain2.com/contact/?sessionid=66543afe6543asdf6asd
  而且这类url:
    http://www.domain2.com/-66543afe6543asdf6asd-/contact/?email=yes
  酿成如许:
    http://www.domain2.com/contact/?email=yes&sessionid=66543afe6543asdf6asd

  为了完成下面的请求,复杂地设置装备摆设两个虚拟办事器,作为domain1和domain2,以下操作:

    <VirtualHost ipaddress>
    DocumentRoot /usr/local/www/domain1
    ServerName www.domain1.com
    RewriteEngine on
    RewriteRule ^/-(.*)-(.*?.*)$ $2&sessionid=$1 [L,R,QSA]
    RewriteRule ^/-(.*)-(.*)$ $2?sessionid=$1 [L,R,QSA]
    </VirtualHost>

    <VirtualHost ipaddress>
    DocumentRoot /usr/local/www/domain2
    ServerName www.domain2.com
    RewriteEngine on
    RewriteRule ^/-(.*)-(.*?.*)$ $2&sessionid=$1 [L,R,QSA]
    RewriteRule ^/-(.*)-(.*)$ $2?sessionid=$1 [L,R,QSA]
    </VirtualHost>

  这些重写的划定规矩完成了下面两个URL重写的请求。
  参加PHP开发学习,或许只是一次偶然的想法吧!只是想在走向社会之前体验、学习在一个公司或者说是项目团队之中如何去更有效的沟通、交流、共同合作,还有就是为毕业实习找工作增加伐码。
小女巫 该用户已被删除
沙发
发表于 2015-2-4 13:09:47 | 只看该作者
php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)
金色的骷髅 该用户已被删除
板凳
 楼主| 发表于 2015-2-5 14:41:00 | 只看该作者
没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。
深爱那片海 该用户已被删除
地板
发表于 2015-2-6 23:51:26 | 只看该作者
基础有没有对学习php没有太大区别,关键是兴趣。
若相依 该用户已被删除
5#
发表于 2015-2-19 03:34:50 | 只看该作者
我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。
山那边是海 该用户已被删除
6#
发表于 2015-3-6 12:28:18 | 只看该作者
最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。
再现理想 该用户已被删除
7#
发表于 2015-3-9 21:52:14 | 只看该作者
个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。
分手快乐 该用户已被删除
8#
发表于 2015-3-17 02:02:49 | 只看该作者
基础有没有对学习php没有太大区别,关键是兴趣。
若天明 该用户已被删除
9#
发表于 2015-3-17 03:09:04 | 只看该作者
最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。
老尸 该用户已被删除
10#
发表于 2015-3-21 07:37:43 | 只看该作者
环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。
admin 该用户已被删除
11#
发表于 2015-3-22 17:15:46 | 只看该作者
装在C盘下面可以利用windows的ghost功能可以还原回来(顺便当做是重转啦),当然啦我的编译目录要放在别的盘下,不然自己的劳动成果就悲剧啦。
透明 该用户已被删除
12#
发表于 2015-3-30 01:32:04 | 只看该作者
对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。
简单生活 该用户已被删除
13#
发表于 2015-4-1 13:09:14 | 只看该作者
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
再见西城 该用户已被删除
14#
发表于 2015-4-11 21:31:09 | 只看该作者
说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。
小妖女 该用户已被删除
15#
发表于 2015-4-16 05:41:30 | 只看该作者
其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。
活着的死人 该用户已被删除
16#
发表于 2015-4-19 06:03:34 | 只看该作者
php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)
兰色精灵 该用户已被删除
17#
发表于 2015-4-26 00:12:27 | 只看该作者
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年  具体的记不清啦,囧。
精灵巫婆 该用户已被删除
18#
发表于 2015-4-26 15:09:28 | 只看该作者
曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线  \\\\\\\'_\\\\\\\' ;
因胸联盟 该用户已被删除
19#
发表于 2015-7-4 01:18:14 | 只看该作者
环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 04:01

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表