php面试小结1

1.session和cookie理解

为什么要用session和cookie?

相同点:

COOKIE和SESSION都是用来实现会话机制的,由于http协议是无状态的,所以要想跟踪一个用户在同一个网站之间不同页面的 状态,需要有这么一个机制----会话机制。

不同点:    

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。

    cookie在第三方应用端保存用户的信息,而session在服务器上保存第三方应用的信息

2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗, 考虑到安全应当使用session。

3、从保存内容的类型的角度来讲,cookie只保存字符串(及能够自动转换成字符串),而session则可以保存所有的数据类型

4、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用COOKIE。

5、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

在哪里用的:

        将登陆信息等重要信息存放为SESSION

       其他信息如果需要保留,可以放在COOKIE

如何修改session的生命时间

一:设置php.ini配置文件,设置session.gc_maxlifetime和session.cookie_lifetime节点属性值

二:代码实现

$lifeTime = 24 * 3600;  // 保存一天 

session_set_cookie_params($lifeTime);

session_start();

         另一种解释:

保存在服务器端的session文件生命周期由php.ini中的session.gc_maxlifetime、gc_probability和gc_divisor来决定,

而保存在客户端的sessionID由客户端cookie来决定,默认其生存周期直到浏览器关闭,它也可以通过php.ini中的设置session.cookie_lifetime来控制,

二者共同来决定session 的生存时间,二者中的其中任意一个失效了,就会造成session失效,

参考1:将php.ini中的session.gc_maxlifetime设置为9999重启apache

参考2:

$savePath = "./session_save_dir/";

   $lifeTime = 小时 *秒;

    session_save_path($savePath);

    session_set_cookie_params($lifeTime);

    session_start();

参考3:

session_start();

$lifeTime = 24 * 3600; // 保存一天

setcookie(session_name(), session_id(), time() + $lifeTime, "/");

cookie伪造     

你的第三方应用端的cookie被恶意的用户截取到,然后向服务器端发送,并且通过验证,他们就会冒充用户进行登录,这就是cookie伪造

防cookie伪造:

现在更通用的做法是使用session来标识用户,也就是说我们为每个第三方应用端生成一个唯一的id,然后在服务端存储这个id所对应的状态。

这样cookie里面仅仅保存了这个id,而没有任何其他的东西。而且这个id往往还有个特性,它是随机生成,且每次登陆都会产生一个新的。这样就更降低了信息泄漏的风险。

如何实现session共享

1.各种web框架早已考虑到这个问题,比如asp.net,是支持通过配置文件修改session的存储介质为sql server的,所有机器的会话数据都从同一个数据库读,就不会存在不一致的问题;

2.以cookie加密的方式保存在第三方应用端.优点是减轻服务器端的压力,缺点是受到cookie的大小限制,可能占用一定带宽,因为每次请求会在头部附带一定大小的cookie信息,另外这种方式在用户禁止使用cookie的情况下无效.

3.服务器间同步。定时同步各个服务器的session信息,此方法可能有一定延时,用户体验也不是很好。

php支持把会话数据存储到某台memcache服务器,你也可以手工把session文件存放的目录改为nfs网络文件系统,从而实现文件的跨机器共享。

session运行原理:

当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识, 称为 sessionid,

如果已包含一个sessionid则说明以前已经为此客户端创建过session,服务器就按照sessionid把这个 session检索出来使用(如果检索不到,可能会新建一个),

如果客户端请求不包含sessionid,则为此客户端创建一个session并且生成一个与此session相关联的sessionid,sessionid的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个sessionid将被在本次响应中返回给客户端以cookie的形式保存。

cookie禁用后,session能用吗?

             能用,可以用URL,和GET方式实现,我们可以使用get,传递SID,或者直接开启透明的SID(此时需要关闭基于cookie的SESSION配置项)。
那么sessionid存储在哪里?

            HTTP缓存中

如何设置cookie让所有子域名都能使用到?

??

类的属性可以序列化后保存到 session 中,从而以后可以恢复整个类,这要用到的函数是____。

serialize() 和 unserialize()

How can you get round the stateless nature of HTTP using PHP

最主要的两个选择是SESSION和COOKIE。

使用SESSION的方法是在每一页的开始加session_start(),然后利用$_SESSION来存取 SESSION变量。

至于 COOKIE你只需记着一个原则:在输出任何文字之前调用 set_cookie()函数设置COOKIE,使用 $_COOKIE获取COOKIE变量。

设置或读取session之前,需要做什么?

session_start()前面不能有任何输出,包括空行。

多台web服务器如何共享 SESSION?

 要想多台web服务器共享SESSION,可以利用MySQL数据库存储SESSION数据。

session在大访问量网站上确实影响系统性能,影响性能的原因之一由文件系统设计造成,在同一个目录下超过10000个文件时,文件的定位将非常耗时,另外就是小文件的效率问题,一般我们的session数据都不会太大(1~2K),如果有大量这样1~2K的文件在磁盘上,IO效率肯定会很差,我们可以采用改写session存储机制,比如存放到数据库中。

MVC的理解


Model(模型),是程序的主体部分,主要包含业务数据和业务逻辑。在模型层,还会涉及到用户发布的服务,在服务中会根据不同的业务需求,更新业务模型中的数据。
View(视图),是程序呈现给用户的部分,是用户和程序交互的接口,用户会根据具体的业务需求,在View视图层输入自己特定的业务数据,并通过界面的事件交互,将对应的输入参数提交给后台控制器进行处理。
Contorller(控制器),Contorller是用来处理用户 输入数据,已经更新业务模型的部分。控制器中接收了用户与界面交互时传递过来的数据,并根据数据业务逻辑来执行服务的调用和更新业务模型的数据和状态。

为什么要用MVC?

解决多人协同开发时,如何分工协作的问题

MVC用在哪里?

   TP,LARAVEL..等框架中

memcached


Memcached是一个高性能的分布式内存对象缓存系统。

目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力,通过在内在里维护一个统一的巨大的的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等,简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。

memcache原理:


1. 查询数据(select),首先通过指定的Key查询(get)Memcache中间缓存层数据,如果存在相对应数据,则直接获取出数据结果,查询过程完全不需要查询数据库。如果不存在,则查询MySQL数据库,并以key对应value的形式将查询结果存储在Memcache缓存数据中,然后将结果返回给查询语句。


2. 更新数据(update),首先更新数据,然后删除相关的memcache数据(delete)。


3. 增加数据(add),首先删除相关缓存数据,然后增加数据。


4. 删除数据(delete),删除数据,并删除Memcache数据。

memcache应用场景   

 1.如果是一个小网站,pv值不大,就不考虑使用memcached

 2.变化频繁,查询频繁,但是不一定写入数据库(适合memcached)(用户在线状态)

 3.变化频繁,一变化就要入库(比如股票,金融)不适合memcached

 4.变化不频繁,查询频繁,不管入不入库,都比较适合memcache,(新浪的新闻频道)

分布式和集群式


分布式是指将不同的业务分布在不同的地方(几台服务器)。 

而集群指的是将几台服务器集中在一起,实现同一业务。

分布式中的每一个节点,都可以做集群。而集群并不一定就是分布式的。

举例:就比如新浪网,访问的人多了,他可以做一个集群,前面放一个响应服务器,后面几台服务器完成同一业务,如果有业务访问的时候,响应服务器看哪台服务器的负载不是很重,就交给哪一台去完成。而分布式,从窄意上理解,也跟集群差不多,但是它的组织比较松散,不像集群,有一个组织性,一台服务器垮了,其它的服务器可以顶上来。

memcache的分布式算法取决于客户端,主要用取余算法和一致性哈希算法。

GET、POST和HEAD的区别?

GET: 请求指定的页面信息,并返回实体主体。 
HEAD: 只请求页面的首部。 
POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。 
PUT: 从客户端向服务器传送的数据取代指定的文档的内容。 
DELETE: 请求服务器删除指定的页面。 
OPTIONS: 允许客户端查看服务器的性能。  
PATCH: 实体中包含一个表,表中说明与该URI所表示的原内容的区别。 
MOVE: 请求服务器将指定的页面移至另一个网络地址。 
COPY: 请求服务器将指定的页面拷贝至另一个网络地址。 
LINK: 请求服务器建立链接关系。 
UNLINK: 断开链接关系。 
WRAPPED: 允许客户端发送经过封装的请求。 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值