2 h398085541 h398085541 于 2014.12.21 13:57 提问

作为大学生学it编程,目前主攻php,应看哪有书籍有助于自身能力的提高?

学习php一年,项目经验少,参加过几次学校比赛,负责后台编写,在编写过程中,遇到到这些问题,很多知识点都能实现同一个功能,就无从下手是用哪个知识点去实现了!比如,session与cookie为例,当时不太会用cookie,于是在实现用户登录模块的,全程用的session,也可以使用户信息显示。于是,我就有疑惑了,既然session、cookie都可以实现同样的功能,那到底是用session还是cookie?查资料,对二者的联系看的是懂非懂的!在此,希望大牛们能推荐些关于 项目实战方面的书籍,以助于小弟 在思想上有质的提高!

8个回答

caozhy
caozhy   Ds   Rxr 2014.12.21 19:21
已采纳

然后回答你另一个问题,就是学习PHP怎么学,看什么书

答案在这张图里面,点击放大。

guwei4037
guwei4037   Ds   Rxr 2014.12.21 14:07

PHP我不熟悉,不能给你意见。但是session和cookie的关系,我可以简单说一下。
session是在服务器端进行验证的,当客户端请求服务器的时候,始终都会带一个sessionId一起请求服务器端,这样服务器端获取到这个sessionId就知道是哪一个客户端发起的请求,从而实现用户跟踪。
cookie是客户端(浏览器)的“小甜饼”,比如在IE浏览器的临时目录下就有很多网站生成的文件,比如将某个网站的用户名存放在客户端,下次登录的时候就可以直接加载用户名,不需要重新输入。
至于什么时候用,我认为session能不用就不用,尽量使用cookie。session会占用服务器端的资源,这样会加重服务器端的负担。
技术上提高可以找相关书籍不断的实践即可,但是思想上的本质的提高,需要大量的实践之后的感悟和思考才能达到。所以你才学习PHP一年,建议还是多做项目,积累项目经验。多看一些软件设计、架构设计的书籍(比如:设计模式、UML、重构等等),几年之后自然会达到。

caozhy
caozhy   Ds   Rxr 2014.12.21 17:59

OK。先回答第一个问题,cookie和session分别是什么,什么时候用哪个。
这个首先要简单说一下http协议,对于你搞的网站来说,用户通过客户端访问你的网站,使用的是http协议,这是一种无状态的协议。所谓无状态,就是说,用户请求你的网站,你的网站解析发来的请求,返回网页。这个流程就结束了。
你的服务器就“忘记”了客户端的存在。
用户每次请求你的网站,你都觉得是一个新的用户。
你的服务器不能保持和客户端的连续的对话。
因此我们引入了session这个概念。session的作用是,将相同用户的多次请求关联起来,让服务器知道它们有一个上下文关系,属于一个用户,这就是session,会话这个词的来历。

caozhy
caozhy   Ds   Rxr 2014.12.21 18:06

我们知道会话这个概念是用来解决保持用户状态的。但是显然http协议中没有,怎么办?如果让你设计,你会怎么做?你可以想下。
其实不难理解,我们可以在客户端第一次访问服务器的时候,传一个随机数,或者指定的唯一的数字给客户端(我们可以管这个叫做令牌,或者叫token)。同时呢,服务器将这个数字记录在自己的内存中。并且把需要的变量关联给这个数字(一般用一个字典集合来表示)。
然后下次客户端再访问服务器,只要每次都传递给服务器这个令牌,服务器都去检查下那个字典,找出对应的数字,就可以知道这个用户以前的状态了。
因此服务器接收到用户的请求无非两种情况,一种是客户端没有带上令牌,或者带了令牌,但是没有查找到服务器上对应的记录,这种情况,服务器视作是一个新的客户端访问。否则视作是现有的一个客户端的连续访问。
客户端和服务器交互的过程中,服务器就可以保存下来客户端的一些状态。而不会忘记了。这有什么用处呢?

caozhy
caozhy   Ds   Rxr 2014.12.21 18:15

最简单的,服务器可以在用户登录的时候,验证了用户名密码,然后记住这个用户是已经登录了,以后不再询问。
那么你要说了,如果我每次客户端都附带上用户名和密码,服务器不用记住什么,每次都从我发送的用户名、密码中判断,岂不是用不着会话了么?显然这么做有两个坏处:
(1)用户名密码被不断传输,费时费力(2)用户名密码反复传输,加大了账户泄密的风险。
再看下面一个案例,就必须要用session了:
我们知道,很多网站为了防止无人工干预的程序滥用,会使用验证码。验证码的流程是,在服务器上随机产生一个数字,然后将它的图片混淆了以后传给客户端,让客户端人工辨认,然后提交后和服务器比较。这个情况设想下,能不能不用session呢?
我们还是像上次那样,产生了验证码让客户端收着?那客户端的程序也能得到验证码,岂不是掩耳盗铃,不需要人工验证了么?
不让客户端获取呢?显然也不行。服务器如果同时响应多个用户的请求,那么显然会产生很多个验证码,此时某个客户端提交了输入的验证码,服务器不跟踪用户状态,知道此时用户输入的是它哪次生成的验证码呢?要知道完全可能第一个用户首先请求了验证图片,第二个用户再请求,但是后者手快,先提交了验证结果,你千万不能把它当作前一个用户,不然乱套了。
对了,还有个办法,把服务器发来的验证图片再传回去,让服务器去识别用户输入的对不对吧。。。这个。。。还是饶了服务器吧。

caozhy
caozhy   Ds   Rxr 2014.12.21 18:22

好,仔细想下,session是一个必不可少的好东西。现在的问题来了,客户端又是如何记住这个令牌的呢?也许你说这个问题还不简单,浏览器记录在内存的某个变量里面就是了。
想法很好。但是我们看到一些网站,有记住用户密码的功能。当浏览器关闭,甚至电脑关闭以后,再打开访问网站,网站还能记住它的存在。显然不能放在内存中了。
然后你又说了,那放在磁盘里就是了。
好的,发明cookie的人也是这么想的。于是就有了cookie。现在我们知道了,cookie用来在客户端保存状态的存储机制。换一句话说,要想session能工作,需要依赖cookie。(这不是绝对的,一般web server为了防止cookie被禁用,会想出别的方法,比如隐藏表单域来维持客户端的状态)

现在说清楚了session和cookie的原理,下面就说说什么时候用session,什么时候用cookie,我可以给你一些原则:

h398085541
h398085541 谢谢-。-
3 年多之前 回复
caozhy
caozhy   Ds   Rxr 2014.12.21 19:18

使用Seesion的场合:
(1)需要针对客户端跟踪,但是又不能放入客户端的敏感信息,比如之前说的验证码
(2)易失的,不必要放入数据库的少量数据,比如用户的查询条件
使用Cookie的场合:
(1)非敏感的,用于服务器跟踪自己的数据,比如说对用户使用偏好的优化,很多广告商据此来推送合适用户的广告。
(2)适合在客户端长时间保存,但是不重要的数据。因为cookie同样随时会被用户清除。同时,cookie无法随用户漫游,你不能用它存储业务,否则如果用户换一台电脑上网,找不到之前的订单了,那就麻烦了。

Session不适合存放大量的数据,这倒不是说Session存放在内存中,怕存不下,而是如果服务器使用了群集这样的技术,也就是使用很多计算机来同时处理用户的请求,Session在服务器之间同步是开销很大的。
当你需要存放的数据很多的时候,也不能使用cookie,因为cookie同样不能存大量的数据,不但如此,而且存放在cookie还增加了网络传输的开销。正确的做法是放入服务器的文件或者数据库中。

melu2012
melu2012   2014.12.23 12:02

session服务器端,cookie客户端。现在有些cms系统习惯把大量的session数据储存到db,再set一个cookie或session值,到时间后修改或删除

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
推荐阅读10本书:提升个人管理能力和领导力
阅读是一种习惯,阅读更是积累知识,提升自我能力的一种有效的手段。很难想象一个人整天把“我是热爱学习的人”挂在嘴边,但是甚至半年都不会阅读一本书,相信这样的人只是说说而已。最近在面试团队Leader时,在向他们提出阅读习惯这一问题时,我吃惊的发现我面试过得大概40多个人中,竟然有超过90%的候选人最近六个月都没有完整的读过一本书。大部分人都是遇到问题时,通过百度、搜搜等互联网工具通过网络来寻找解决问题
如何提高核心竞争力
如何提高核心竞争力来自:http://blog.csdn.net/acosoft2009-9-6我一直认为,学习一门知识、一门技术,主要要从四个方面把握,即思想、原理、核心、本质。只有从这四方面下手,东西才能真正的学到,才能真正的做到活学活用。对于普通的、表面化的知识,大多数人都能学到,这些知识其实没有竞争力,只要别人愿意花时间去学,就可以给你造成竞争上的压力。而在这四方面是很少有人会学到
软件工程师如何提高英语文档阅读能力
今天在知乎上被邀请回答这个问题,一不小心写了很多,算算已经可以当作一篇博客了,于是记录下来。   问题:作为一名程序员,虽说每天都在和英语打交道,但是当看到一篇英语文档或者英语技术文章的时候还是比较头疼,理解他们的意思也只能是20%。尤其是使用google搜索的时候,很多问题解决办法都是英文的,还有一些国外比较有名的网站比如 stack overflow,上面也有很多学习的资源。怎样才能让自
介绍几本学习php编程比较好的书籍
1.《PHP与MySQL程序设计》 --PHP与MySQL的经典之作,该书既有基础部分,又有深层次的东西。 2.《细说php》 --介绍PHP开发中最主流的技术,内容既实用又全面,辅以视频教程,使读者轻松掌握所学知识。 3.《PHP Web 2.0 开发实战》 --该书适合中、高级的PHP程序员阅读。 4.《PHP高级程序设计:模式、框架
研究生期间应该看完的书!
今天在这小小立个誓,希望自己在接下来的两年里能把以下的读书任务完成了! (1)《算法导论》——看三遍以上,将所有的算法都实现一遍! (2)《编译原理》——认认真真看完两遍,将题目做一遍。 (3)《Unix环境高级编程》——将所有的代码自己实现一遍! (4)《Unix'网络
【好书推荐】提高思维水平的四本好书
《 你的灯亮着吗? 》2003年8月出版    这本书读起来非常轻松,仅仅120页,但却相当生动有内容,甚至能改变你对问题的思考方式。它的内容由六个幽默生动的小故事组成,每个小故事都有若干生动有趣而又有警戒意义的故事作为主线,通过对故事中实际问题的解决,引申出作者对于问题解决领域的重要观点。全书包括了55幅精美的线条画(风格有点像《谁动了我的奶酪?》),是一本制作精良的珍品。每个小故事都穿插着非常
超猛提升英语阅读能力的软件
想提高英语能力吗? 试试这个软件吧,超好用啊! 超猛提升英语阅读能力的软件
学编程看些什么书
分类: 书籍推荐 2013-07-06 01:50 1376人阅读 评论(6) 收藏 举报 目录(?)[-] 编程基础设计基础Linux与操作系统算法新入手的一些好书 虽然一直想写点什么,但是感觉自己怎么写肯定都不如书上写的好,所以到最后感觉还是推荐点书比较好。 下面列举一些自己感觉还不错的书,可能会和以前的有重复,就当做总集篇吧。一般好书都有些难度,而且
一大波能提高编程技能的游戏
有时候咱们程序员也需要娱乐或放松一下,但放松的同时,也可以做一些有益于技能成长的事情。今天就来看看这一大波能够训练大脑,并且提升编程能力的网站。 游戏 1)Codecombat 这是一个可以帮助你学习编程的并且非常赞的多人在线游戏,而不是一个游戏化的编程课程。 在 CodeCombat 中,你扮演一个英雄通过游戏中不同等级的冒险。第一关是 Kithard Dunge
给一位想提高水平的PHP程序员的建议
【来信】老师,您好:  我是91年的,学历中专,目前的职位是php程序员,可我发现我并不是真正的程序员,计算机像进程多线程 内存方面我都不是 很了解,看他们那些C++程序员讨论就觉得自己很差,更别说算法之类的了,可能是没经过系统的学习吧,我想经过系统学习 计算机知识,该如何去做,看书么,推荐两本,想看下 数据结构的书,,不知道我能不能看懂;【回复】  来信收到。我想以逐句点评的方式给你回复。年轻真