|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
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开发学习,或许只是一次偶然的想法吧!只是想在走向社会之前体验、学习在一个公司或者说是项目团队之中如何去更有效的沟通、交流、共同合作,还有就是为毕业实习找工作增加伐码。 |
|