Cookie、Session、XForms、文件上传

Cookie

php可以在用户感知不到的情况下支持HTTP cookie,cookie是在客户端浏览器存储的用户来跟踪识别用户身份的机制。在php中可以用setcookie() 或 setrawcookie() 函数设置cookie。cookie是HTTP头的一部分,所以setcookie()函数必须在输出其他信息到浏览器之前调用。

如果 variables_order 中包括“C”,则任何从客户端发送的 cookie 都会被自动被放进$_COOKIE全局数组。如果希望对一个 cookie 变量设置多个值,则需在 cookie 的名称后加 [] 符号。

解释一下variables_order:这是php.inpi配置文件中的一个配置项,用来设置全局变量的解析,他有5个值:EGPCS,分别表示Environment, Get, Post, CookieServer,栗子:如果variables_order=SP,php就会创建全局数组$_SERVER,$_POST。

cookie基本用法

setcookie ( string $name [, string $value = "" [, int $expire = 0 [, string $path = "" [, string $domain = "" [, bool $secure = false [, bool $httponly = false ]]]]]] )

参数说明:

name:cookie的变量名。
value:变量值。
expire:过期时间。
path:cookie生效的路径,如果设置“/“表示在整个域名都有效,如果设置为”/xyy/“,表示只有在xyy目录以及它的子目录下有效。
domain:设置cookie生效的域名,栗子:如果设置成php.com,那么所有包含php.com的域名都可以使用这个cookie,如:www.100php.comwww.100php.com.cn
secure:如果这个值设置为true,那么只有通过HTTPS连接客户端时才会传递这个cookie。
httponly:如果设为true,客户端浏览器的js脚本将不能获取到这个cookie的值。

Session

session(会话)用来保存用户访问web应用时的数据,举个栗子:女神在逛淘宝的时候,看到各种衣服、化妆品、如果每看见一个喜欢的东西就立刻购买、支付,那样会很麻烦,于是就有了购物车这个东西,女神可以把所有的东西先添加购物车,然后一次性支付。即使女神添加完购物车,不小心把页面关了,再次打开的时候,发现购物车里面的东西还在,这就是session起的作用了,女神添加购物车的时候,实际上是向session中写数据,session中的数据是临时的,当会话结束后session的数据会被销毁,如果想永久的保存session数据,可以放在数据库中。

session的工作机制是这样的:当有新的用户访问web应用时,为这个用户创建唯一的UID,基于这个UID来存储变量,UID保存在cookie中,当客户端禁用了cookie,只能通过URL进行传递了。

session的基本用法

session_start():开启一个会话,如果想返回一个已经存在的会话,需要把会话的ID作为一个参数传进去,并且最好把这个函数放在最开始调用,切在它之前不能有其他输出,否则会报个warning.

session_register(string name):注册一个新的session变量,注册的变量可以用$_SESSION[name]或$HTTP_SESSION_VARS[name]的形式来取值或赋值。

session_unregister(string name) :把注册的变量名删除,和session_unset()用法相同

session_is_registered(string name):检查变量名是否被注册

session_destroy():结束当前会话,清空会话中的数据。

session_name(string name): 读写当前会话名称,传name参数表示设置当前会话名称为name,不传表示获取名称。

session_id(string [id]):读写会话id.

处理XForms

XForms是区别于传统web表单的另外一种form,它和form的区别是,html数据发送格式是application/x-www-form-urlencoded,但是XForm的格式是XML。当使用XForms提交表单时,$HTTP_RAW_POST_DATA中包含了由浏览器产生的XML文件,可以将这个XML文件传递给其他喜欢XML文件的引擎或文档解析器处理。

XForms栗子:

这个栗子中method设置为urlencoded-post表示将数据以原始的方式提交到$_POST变量中。

文件上传处理

用POST方法可以上传文本和二进制文件,在php.ini文件中通过这些选项来设置上传文件的一些限制: file_uploads,upload_max_filesize,upload_tmp_dirpost_max_size 以及 max_input_time。

文件上传表单栗子:


enctype=multipart/form-data表示接收除了文本之外的其他文件类型,MAX_FILE_SIZE表示上传文件的最大尺寸,单位字节,如果用户上传了超过这个尺寸的文件,会立刻返回错误信息。

上传的文件信息会保存在$_FILES数组里,数组中共有这些内容:

$_FILES['userfile']['name’]:客户端机器文件的原名称。
$_FILES['userfile']['type’]:文件的 MIME 类型,如果浏览器提供的话,如果不提供则为空。栗子:“image/gif”。
$_FILES['userfile']['size’]:已上传文件的大小,单位为字节。
$_FILES['userfile']['tmp_name’]:文件被上传后在服务端储存的临时文件名。
$_FILES['userfile']['error’]:和该文件上传相关的错误代码。

文件被上传后,默认地会被储存到服务端的默认临时目录中,可以在 php.ini 中设置upload_tmp_dir来改变默认路径。

使用文件上传表单需要注意的事:对 MAX_FILE_SIZE 设置的值,不能大于 ini 设置中 upload_max_filesize 选项设置的值,默认值为 2M,而且不能大于post_max_size 设置的值。

如果 max_execution_time 设置的值太小,脚本运行的时间可能会超过该设置。因此,也要保证 max_execution_time 足够的大。max_execution_time 仅仅只影响脚本本身运行的时间。任何其它花费在脚本运行之外的时间,诸如用函数 system() 对系统的调用、sleep() 函数的使用、数据库查询、文件上传等,在计算脚本运行的最大时间时都不包括在内。max_input_time 以秒为单位设定了脚本接收输入的最大时间,包括文件上传。对于较大或多个文件,或者用户的网速较慢时,可能会超过默认的 60 秒。

处理上传的文件

用is_uploaded_file()函数判断文件名是不是通过post表单上传的,参数是文件名,绝对路径或相对路径。

move_uploaded_file ( string $filename , string $destination ),把上传的文件移动到指定目录。

上传一组文件:

在表单中文件名后面加[]即可,栗子:


在服务端用$_FILES["pictures”]获取到的是保存多个文件信息的二维数组,通过遍历数组处理每个文件:
<pre>
foreach ($_FILES["pictures"]["error"] as $key => $error) {

if ($error == UPLOAD_ERR_OK) {

    $tmp_name = $_FILES["pictures"]["tmp_name"][$key];

    $name = $_FILES["pictures"]["name"][$key];

    move_uploaded_file($tmp_name, "data/$name");
}

}
</pre>

常见的错误码,就是$_FILES["pictures"]["error”]的值:

UPLOAD_ERR_OK :其值为 0,没有错误发生,文件上传成功。
UPLOAD_ERR_INI_SIZE:其值为 1,上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
UPLOAD_ERR_FORM_SIZE:其值为 2,上传文件的大小超过了 HTML 表单中MAX_FILE_SIZE 选项指定的值。
UPLOAD_ERR_PARTIAL:其值为 3,文件只有部分被上传。
UPLOAD_ERR_NO_FILE:其值为 4,没有文件被上传。
UPLOAD_ERR_NO_TMP_DIR:其值为 6,找不到临时文件夹。
UPLOAD_ERR_CANT_WRITE:其值为 7,文件写入失败。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,519评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,842评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,544评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,742评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,646评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,027评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,513评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,169评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,324评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,268评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,299评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,996评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,591评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,667评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,911评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,288评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,871评论 2 341

推荐阅读更多精彩内容

  • 背景在HTTP协议的定义中,采用了一种机制来记录客户端和服务器端交互的信息,这种机制被称为cookie,cooki...
    时芥蓝阅读 2,353评论 1 17
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,561评论 18 139
  • 一、会话控制(session与cookie) 1.cookie简介 Cookie是存储在客户端浏览器中的数据,我们...
    空谷悠阅读 615评论 0 5
  • 作者:晚晴幽草轩www.jeffjade.com/2016/10/31/115-summary-of-cookie...
    饥人谷_Dylan阅读 1,219评论 0 51
  • 我身边最美的故事我认为不是那些为爱飞蛾扑火,轰轰烈烈的爱情,也不是那些从青葱岁月走向白发苍苍,终生相伴的故事。我身...
    小小钊的哆啦阅读 185评论 2 4