仓酷云

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

[学习教程] PHP网页设计静态网页手艺PHP关于cookie和session的...

[复制链接]
第二个灵魂 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:02:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
我先把我自己学习PHP的过程做一下概括:   1. PHP的COOKIE
cookie 是一种在近程阅读器端贮存数据并以此来跟踪和辨认用户的机制。
PHP在http协定的头信息里发送cookie, 因而 setcookie() 函数必需在其它信息被输入到阅读器前挪用,这和对 header() 函数的限制相似。
1.1 设置cookie:
    可以用 setcookie() 或 setrawcookie() 函数来设置 cookie。也能够经由过程向客户端直接发送http头来设置.
1.1.1 利用setcookie()函数设置cookie:
bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, bool secure [, bool httponly]]]]]] )
     name:   cookie变量名
     value:   cookie变量的值
     expire:  无效期停止的工夫,
     path:    无效目次,
     domain: 无效域名,顶级域独一
     secure:  假如值为1,则cookie只能在https毗连上无效,假如为默许值0,则http和https都可以.
例子:
<?php
$value = 'something from somewhere';
setcookie("TestCookie", $value); /* 复杂cookie设置 */
setcookie("TestCookie", $value, time()+3600); /* 无效期1个小时 */
setcookie("TestCookie", $value, time()+3600, "/~rasmus/", ".example.com", 1); /* 无效目次 /~rasmus,无效域名example.com及其一切子域名 */
?>
设置多个cookie变量: setcookie('var[a]','value');用数组来暗示变量,但他的下标不必引号.如许就能够用$_COOKIE[‘var’][‘a’]来读取该COOKIE变量.
1.1.2. 利用header()设置cookie;
header("Set-Cookie: name=$value[;path=$path[;domain=xxx.com[;...]]");
前面的参数和下面列出setcookie函数的参数一样.
好比:
$value = 'something from somewhere';
header("Set-Cookie:name=$value");
1.2 Cookie的读取:
直接用php内置超等全局变量 $_COOKIE就能够读取阅读器真个cookie.
下面例子中设置了cookie"TestCookie",如今咱们来读取:
print $_COOKIE['TestCookie'];
COOKIE是否是被输入了?!
1.3 删除cookie
只需把无效工夫设为小于以后工夫, 和把值设置为空.例如:
setcookie("name","",time()-1);
用header()相似.
1.4 罕见成绩处理:
1) 用setcookie()时有毛病提醒,多是由于挪用setcookie()后面有输入或空格.也能够你的文档使从其他字符集转换过去,文档前面能够带有BOM签名(就是在文件内容添加一些埋没的BOM字符).处理的举措就是使你的文档不呈现这类情形.还有经由过程利用ob_start()函数有也能处置一点.
2) $_COOKIE受magic_quotes_gpc影响,能够主动本义
3) 利用的时分,有需要测试用户是不是撑持cookie
<!--[if !supportLineBreakNewLine]-->
1.5 cookie任务机理:
有些进修者对照感动,没心思把道理研讨,所以我把它放前面.
a) 办事器经由过程跟着呼应发送一个http的Set-Cookie头,在客户机中设置一个cookie(多个cookie要多个头).
b) 客户端主动向办事器端发送一个http的cookie头,办事器吸收读取.
HTTP/1.x 200 OK
X-Powered-By: PHP/5.2.1
Set-Cookie: TestCookie=something from somewhere; path=/
Expires: Thu, 19 Nov 2007 18:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-type: text/html
这一行完成了cookie功效,收到这行后
Set-Cookie: TestCookie=something from somewhere; path=/
阅读器将在客户真个磁盘上创立一个cookie文件,并在外面写入:
TestCookie=something from somewhere;
/
这一行就是咱们用setcookie('TestCookie','something from somewhere','/');的了局.也就是用header('Set-Cookie: TestCookie=something from somewhere; path=/');的了局.
<!--[endif]-->
2. PHP的Session
session利用过时工夫设为0的cookie,而且将一个称为session ID的独一标识符(一长串字符串),在办事器端同步生成一些session文件(可以本人界说session的保留类型),与用户机联系关系起来.web使用法式存贮与这些session相干的数据,而且让数据跟着用户在页面之间传递.
会见网站的来客会被分派一个独一的标识符,即所谓的会话 ID。它要末寄存在客户真个 cookie,要末经过 URL 传递。
会话撑持答应用户注册恣意数量的变量并保存给各个恳求利用。当来客会见网站时,PHP 会主动(假如 session.auto_start 被设为 1)或在用户恳求时(由 session_start() 明白挪用或 session_register() 黑暗挪用)反省恳求中是不是发送了特定的会话 ID。假如是,则之前保留的情况就被重建。
2.1 sessionID的传送
2.1.1 经由过程cookie传送sessin ID
     利用session_start()挪用session,办事器端在生成session文件的同时,生成session ID哈希值和默许值为PHPSESSID的session name,并向客户端发送变量为(默许的是)PHPSESSID(session name),值为一个128位的哈希值.办事器端将经由过程该cookie与客户端停止交互.
   session变量的值经php外部系列化后保留在办事器机械上的文本文件中,和客户真个变量名默许情形下为PHPSESSID的coolie停止对应交互.
     即办事器主动发送了http头:header('Set-Cookie: session_name()=session_id(); path=/');
即setcookie(session_name(),session_id());
    当从该页跳转到的新页面并挪用session_start()后,PHP将反省与给定ID相干联的办事器端存贮的session数据,假如没找到,则新建一个数据集.
2.1.2 经由过程URL传送session ID
只要在用户制止利用cookie的时分才用这类办法,由于阅读器cookie已通用,为平安起见,可不必该办法.
<a href="p.php?<?php print session_name() ?>=<?php print session_id() ?>">xxx</a>,也能够经由过程POST来传递session值.
2.2 session根基用法实例
<?php
// page1.php
session_start();
echo 'Welcome to page #1';
/* 创立session变量并给session变量赋值 */
$_SESSION['favcolor'] = 'green';
$_SESSION['animal'] = 'cat';
$_SESSION['time'] = time();
// 假如客户端利用cookie,可直接传递session到page2.php
echo '<br /><a href="page2.php">page 2</a>';
// 假如客户端禁用cookie
echo '<br /><a href="page2.php?' . SID . '">page 2</a>';
/*
默许php5.2.1下,SID只要在cookie被写入的同时才会有值,假如该session
对应的cookie已存在,那末SID将为(不决义)空
*/
?>
<?php
// page2.php
session_start();
print $_SESSION['animal']; // 打印出单个session
var_dump($_SESSION); // 打印出page1.php传过去的session值
?>
2.3 利用session函数掌握页面缓存.
    良多情形下,咱们要肯定咱们的网页是不是在客户端缓存,或要设置缓存的无效工夫,好比咱们的网页上有些敏感内容而且要登录才干检查,假如缓存到当地了,可以直接翻开当地的缓存就能够不登录而阅读到网页了.
    利用session_cache_limiter('private');可以掌握页面客户端缓存,必需在session_start()之前挪用.
更多参数见http://blog.chinaunix.net/u/27731/showart.php?id=258087的客户端缓存掌握.
     掌握客户端缓存工夫用 session_cache_expire(int);单元(s).也要在session_start()前挪用.
    这只是利用session的情形下掌握缓存的办法,咱们还可以在header()中掌握掌握页面的缓存.
2.4 删除session
要三步完成.
<?php
session_destroy();                                      // 第一步: 删除办事器端session文件,这利用
setcookie(session_name(),'',time()-3600);  // 第二步: 删除实践的session:
$_SESSION = array();                                  // 第三步: 删除$_SESSION全局变量数组
?>
2.5 session在PHP大型web使用中的利用
关于会见量大的站点,用默许的session存贮体例其实不合适,今朝最优的办法是用数据库存取session.这时候,函数bool session_set_save_handler ( callback open, callback close, callback read, callback write, callback destroy, callback gc )就是供应给咱们处理这个成绩的计划.
该函数利用的6个函数以下:
1.   bool open() 用来翻开会话存储机制,
2.   bool close() 封闭会话存储操作.
3.  mixde read() 从存储中装在session数据时利用这个函数
4.   bool write() 将给定session ID的一切数据写到存储中
5.   bool destroy() 损坏与指定的会话ID相干联的数据
6.   bool gc()  对存储体系中的数据停止渣滓搜集
例子见php手册session_set_save_handler() 函数.
假如用类来处置,用
session_set_save_handler(
    array('className','open'),
    array('className','close'),
    array('className','read'),
    array('className','write'),
    array('className','destroy'),
    array('className','gc'),
)
挪用className类中的6个静态办法.className可以换对象就不必挪用静态办法,然而用静态成员不必生成对象,功能更好.
2.6 经常使用session函数:
bool   session_start(void); 初始化session
bool   session_destroy(void): 删除办事器端session联系关系文件。
string session_id() 以后session的id
string session_name() 以后存取的session称号,也就是客户端保留session ID的cookie称号.默许PHPSESSID。
array  session_get_cookie_params() 与这个session相干联的session的细节.
string session_cache_limiter() 掌握利用session的页面的客户端缓存
ini    session_cache_expire() 掌握客户端缓存工夫
bool   session_destroy()     删除办事器端保留session信息的文件
void   session_set_cookie_params ( int lifetime [, string path [, string domain [, bool secure [, bool httponly]]]] )设置与这个session相干联的session的细节
bool session_set_save_handler ( callback open, callback close, callback read, callback write, callback destroy, callback gc )界说处置session的函数,(不是利用默许的体例)
bool session_regenerate_id([bool delete_old_session]) 分派新的session id
2.7 session平安成绩
进击者经由过程投入很大的精神测验考试取得现有效户的无效会话ID,有了会话id,他们就有能够可以在体系中具有与此用户不异的才能.
因而,咱们次要处理的思绪是效验session ID的无效性.
<?php
if(!isset($_SESSION['user_agent'])){
    $_SESSION['user_agent'] = $_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT'];
}
/* 假如用户session ID是捏造 */
elseif ($_SESSION['user_agent'] != $_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT']) {
    session_regenerate_id();
我的文章不会对您的学习起到实质性的作用,您能否成功,还得靠自己的,坚持,坚持,再坚持,就是步入成功的不二法门。
谁可相欹 该用户已被删除
沙发
发表于 2015-2-4 08:07:25 | 只看该作者
对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。
再现理想 该用户已被删除
板凳
发表于 2015-2-11 08:16:45 | 只看该作者
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
分手快乐 该用户已被删除
地板
发表于 2015-2-24 02:42:19 | 只看该作者
对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。
柔情似水 该用户已被删除
5#
发表于 2015-3-7 10:33:13 | 只看该作者
我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。
再见西城 该用户已被删除
6#
发表于 2015-3-13 06:57:14 | 只看该作者
写的比较杂,因为我也是个新手,不当至于大家多多指正。
深爱那片海 该用户已被删除
7#
发表于 2015-3-15 14:36:36 | 只看该作者
实践是检验自己会不会的真理。
乐观 该用户已被删除
8#
发表于 2015-3-17 08:32:15 | 只看该作者
最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。
简单生活 该用户已被删除
9#
发表于 2015-3-22 04:16:26 | 只看该作者
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
飘灵儿 该用户已被删除
10#
发表于 2015-3-28 08:48:50 | 只看该作者
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
莫相离 该用户已被删除
11#
发表于 2015-3-30 05:46:48 | 只看该作者
使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的
若相依 该用户已被删除
12#
发表于 2015-4-3 20:50:32 | 只看该作者
做为1门年轻的语言,php一直很努力。
愤怒的大鸟 该用户已被删除
13#
发表于 2015-4-6 00:10:57 | 只看该作者
,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。
海妖 该用户已被删除
14#
发表于 2015-4-8 18:55:20 | 只看该作者
php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。
冷月葬花魂 该用户已被删除
15#
发表于 2015-4-21 17:16:24 | 只看该作者
曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线  \\\\\\\'_\\\\\\\' ;
第二个灵魂 该用户已被删除
16#
 楼主| 发表于 2015-4-22 08:59:04 | 只看该作者
开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。
小女巫 该用户已被删除
17#
发表于 2015-4-26 09:10:36 | 只看该作者
最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。
因胸联盟 该用户已被删除
18#
发表于 2015-4-30 22:22:02 | 只看该作者
学习php的目的往往是为了开发动态网站,phper就业的要求也涵盖了很多。我大致总结为:精通php和mysql
飘飘悠悠 该用户已被删除
19#
发表于 2015-5-2 01:41:26 | 只看该作者
当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,
变相怪杰 该用户已被删除
20#
发表于 2015-5-6 02:10:46 | 只看该作者
建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-9-20 19:29

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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