PHP-web和框架(一):web
session与cookie的区别是什么?
session
PHP
的会话也称为session
。PHP
在操作session
时,当用户登陆或访问一些初始页面时,服务器会为客户端分配一个sessionID
。sessionID
是一个加密的随机数字,在session
的生命周期中保存在客户端。它可以保存在用户机器的cookie
中,也可以通过URL
在网络中进行传输。
用户通过sessionID
可以注册一些特殊的变量,称为会话变量,这些变量的数据保存在服务器端。在一次特定的网站连接中,若客户端通过cookie
或URL
找到sessionID
,那么服务器就可以根据客户端传来的sessionID
访问会话保存在服务器端的会话变量。
session
的生命周期只在一次特定的网站连接中有效,当关闭浏览器后,session
会自动失效,之前注册的会话变量也不能再使用。具体的使用步骤如下:
1.初始化会话。在实现会话功能之前必须要初始化会话,初始化会话使用session_start()
函数:
bool session_start(void)
该函数将检查sessionID
是否存在,若不存在,则创建一个,并且能够使用预定义数组$_session
进行访问。若启动会话成功,则函数返回true
,否则返回false
。会话启动后就可以载入该会话已经注册的会话变量以便使用。
2.注册会话变量。自PHP4.1
以后,会话变量保存在预定义数组$_session
中,所以可以通过直接定义数组单元的方式来定义一个会话变量。会话变量定义后保存在服务器端,并对该变量的值进行跟踪,直到会话结束或手动注销该变量。
3.访问会话变量。要在一个脚本中访问会话变量,首先要使用session_start()
函数启动一个会话。之后就可以使用预定义数组$_session
访问该变量了。
4.销毁会话变量。会话变量使用完后,删除已经注册的会话变量以减少对服务器资源的占用。删除会话变量使用unset()
函数。要一次销毁所有的会话变量且不清除session
文件,使用session_unset()
。
5.销毁会话。使用完一个会话后,要注销对应的会话变量。调用session_destroy()
函数销毁会话,该函数将删除会话的所有数据并清除session
文件,关闭该会话。
共享
session
的方式主要有哪些?
基于
NFS
的session
共享。NFS
(Network File System
)最早由sun
公司为解决Unix
网络主机间的目录共享而研发。仅需将共享目录服务器mount
到其他服务器的本地session
目录即可。基于数据库的
session
共享基于
cookie
的session
共享基于缓存(
Memcache、Redis
)的session
共享
如何修改
session
的生存时间?
将
php.ini
中的session.gc_maxlifetime
设置为9999,重启Apache
session
提供了一个函数session_set_cookie_params()
来设置session
的生存期,该函数必须在session_start()
之前调用,示例代码如下:
1 | $savePath = "./session_save_dir/"; |
- 使用
setcookie()
;
cookie
cookie
可以用来存储用户名、密码、访问该站点的次数等信息。在访问某个网站时,cookie
将HTML
网页发送到浏览器的小段信息以脚本的形式保存在客户端的计算机上。一般来说,cookie
通过HTTP Headers
从服务器端返回到浏览器。首先,服务器端在响应中利用Set cookie Header
来创建一个cookie
。其次浏览器在请求中通过cookie Header
包含这个已经创建的cookie
,并且将它返回至服务器,从而完成浏览器的验证。
cookie
技术也有很多局限性,如:
多人共用一台计算机,
cookie
信息容易泄漏一个站点存储的
cookie
信息有限有些浏览器不支持
cookie
用户可以通过设置浏览器选项来禁用
cookie
cookie
的使用步骤如下:
- 创建
cookie
使用setcookie()
函数,语法格式如下:
1 | /** |
访问
cookie
删除
cookie
注意:HTTP
协议是无状态的,要想追踪一个用户在一个网站不同页面之间的状态,我们需要一种机制,这种机制就是会话机制。
session
和cookie
的区别如下:
角度 | 描述 |
---|---|
保存位置 | cookie 保存在客户端, session`保存在服务器端 |
安全性角度 | session 的安全性更高 |
保存内容的类型角度 | cookie 只保存字符串(即能够自动转换成字符串),session 可以保存所有的数据类型 |
保存内容的大小角度 | cookie 保存的内容是有限的,session 基本无限制 |
性能角度 | session 对服务器压力会更大一些 |
GET和POST有什么区别?
用户在页面上填写的表单信息都可以通过GET
和POST
这两种方法将数据传递到服务器上,当使用GET
方法时,所有的信息都会出现在URL地址中,并且使用GET
方法最多只能传递1KB字节的数据,所以在传输量小或者安全性不高的情况下可以使用GET
方法。对于POST
而言,最多可以传输2MB字节的数据,而且可以根据需要调节。
如何预防各类安全性问题?
web安全问题
SQL
注入Cross-Site Scripting
,XSS
- 跨站脚本攻击Cross-Site Request Forgery
,CSRF
- 跨站请求伪造
数据库操作安全问题
- 没有验证用户
HTTP
请求方式 - 没有验证表单来源的唯一性
HTTP状态码的含义是什么?
1 | 1XX: Informational(信息性状态码)- 接受的请求正在处理 |
用户在浏览器中输入一个网址,按下回车后后台的执行流程是怎么样的?
最基本的页面请求与响应的流程:
用户通过浏览器输入地址来请求所需的资源
浏览器接受用户的请求,并把该请求组装成指定的格式(
HTTP
协议的格式)发送给服务器,客户端与服务器之间通过HTTP
协议来完成具体的交互。其中请求的数据流中主要包括HTTP
(建立在TCP/IP
协议基础上的一个协议)、请求方法(GET
/POST
)、请求的网址(URL
)以及请求的一些参数信息(当然在把数据发送给服务器之前,首先需要根据网页地址获取服务器的IP
地址,这就需要通过访问DNS
服务器来完成)。服务器接收到客户端发来的请求,并查找用户所需要的资源
服务器查找到用户请求的资源后,把该资源返回给客户端
服务器通过把响应消息组装成特定的信息格式后返回给客户端,这个过程通过
HTTP
协议来完成。响应的数据主要包含状态码、Content-Type
、响应消息的内容浏览器对
HTML
进行解析后并把响应结果呈现给用户
utf-8编码需要注意哪些问题?
若网站的编码为utf-8
,那么相关的文件和数据库都必须使用utf-8
编码,否则网站就会出现乱码。
具体需要注意utf-8
编码的文件有:
数据库需要用
utf-8
编码,包括数据库和表PHP
连接数据库的时候,需要指定所使用的编码为utf-8
网站中所有的文件都使用
utf-8
如何进行网站的优化?
确认服务器硬件是否足够支持当前的流量
优化数据库访问
防盗链
控制大文件的下载和控制文件下载的数量
使用不同主机分流主要流量
使用流量统计软件,针对流量的访问情况进行系统优化