cookie
Cookie是存储在客户端浏览器中的数据,通过Cookie来跟踪和存储用户数据。一般情况下,Cookie通过HTTP headers从服务器返回到客户端
php通过setcookie函数进行Cookie的设置,任何从浏览器发回的Cookie,php都会将他存储在$_COOKIE的全局变量之中,因此可以通过$_COOKIE['key']的形式来读取某个Cookie的值
Cookie具备有效期,当有效期结束之后,Cookie会自定的从客户端删除
setcookie函数有7个可选参数常用的为前5个
name(Cookie名) 可以通过$_COOKIE['name'] 进行访问
value(Cookie值)
expire(过期时间) Unix时间戳格式,默认为0,表示浏览器关闭即失效
path(有效路径)如果路径为'/',则整个网站都有效
domain(有效域) 默认域名都有效,如果设置了'www.imooc.com',则只在www子域有效
setcookie("TestCookie",$value,time()+3600,"/path/","imooc.com");
//删除cookie 将cookie的过期时间设置到当前时间之前,则cookie会自动失效,也就达到了删除cookie的目的
setcookie('test','',time()-1);
setcookie('test', time(), 0, '/path');
上面的设置会使test在/path以及子路径/path/doc下都有效,但是在根目录下就读取不到test的cookie值
session和cookie的异同
cookie将数据存储到客户端,建立起用户与服务器之间的联系,通常可以解决很多问题。但是cookie仍然具有一些局限
①cookie相对不是安全的,容易被盗用导致cookie欺骗
②单个cookie的值做大只能存储4k
③每次请求都要进行网络传输,占用带宽
session是将用户的会话数据存储在服务器,没有大小限制,通过一个session_id进行用户识别,php默认情况下session id是通过cookie来保存的,因此从某种程度上来说,session依赖于cookie,但这不是绝对的,session id也可以通过参数来实现,只要能将session id传递到服务端进行识别的机制都可以使用session.
//开始使用session
session_start();
//设置一个session
$_SESSION['test'] = time();
// 显示当前的session_id
echo "session_id:".session_id();
读取session值
echo $_SESSION['test'];
// 销毁一个session
unset($_SESSION['test']);
var_dump($_SESSION);
session会自动的对要设置的值进行encode和decode,因此session可以支持任意数据类型,包括数据和对象等
session_start();
$_SESSION['arry'] = array('name' => 'jobs');
$_SESSION['obj'] = new Car();
默认情况下,session是以文件形式存储在服务器上的,因此当一个页面开启了session之后,会独占这个session文件,这样会导致当前用户的其它并发访问无法执行而等待。可以采用缓存或者数据库的形式存储来解决这个问题
删除与销毁session
删除某个session值可以使用php的unset函数,删除后就会从全局变量$_SESSION中去除,无法访问
如果要删除所有的session,可以使用session_destory函数销毁当前session,session_destroy会删除所有数据,但是session_id仍然存在
session_destroy并不会立即的销毁全局变量$_SESSION中的值,只有当下次访问的时候,$_SESSION才为空,因此如果需要立即销毁$_SESSION,可以使用unset函数
如果需要同时销毁cookie中的session_id,通常在用户退出的时候可能会用到,则还需要显示的调用setcookie方法删除session_id的cookie值‘
使用session来存储用户的登录信息
用户在登录成功以后,通常可以将用户的信息存储在session中,一般的会单独的将一些重要的字段单独存储,然后所有的用户信息独立存储
$_SESSION['uid'] = $userinfo['uid'];
$_SESSION['userinfo'] = $userinfo;
登录信息既可以存储在session中,也可以存储在cookie中,他们之间的区别在于session可以方便的存取多种数据类型,而cookie只支持字符串类型,同时对于一些安全性比较高的数据,coolie需要进行格式化与加密存储,而session存储在服务端则安全性较高
文件操作
读取文件内容
file_get_contents 读取文件的函数,可以将整个文件全部读取到一个字符串中
$content = file_get_contents('./test.txt');
$content = file_get_contents('./test.txt,null,null,100,500'); //通过参数控制读取内容的开始点以及长度
fgets 可以从文件指针中读取一行 使用fopen打开文件,最好使用fclose关闭文件指针,以避免文件句柄被占用
freads可以读取指定长度的字符串
$fp = fopen('./text.txt','rb');
while(!feof($fp)){
ehco fgets($fp); //读取一行
}
fclose($fp);
判断文件是否存在
is_file与file_exists 判断文件存在的函数
file_exists不仅可以判断文件是否存在,同时也可以判断目录是否存在。
is_readable与is_writeable 判断文件是否可读与可写
$filename = './test.txt';
if(is_writeable($filename)){file_put_contents($filename,'test');}
if(is_readable($filename)){echo file_get_contents($filename);}
写入内容到文件
file_put_contents 和fwrite
$filename = './test.txt';
$data = 'test';
file_put_contents($filename,$data);
==========================================
$fp = fopen('./test.txt','w');
fwrite($fp,'hello');
fwrite($fp,'world');
fclose($fp);
取得文件的属性
fileowner:获的文件的所有者
filectime:获取文件的创建时间
filemtime:获取文件的修改时间
fileatime:访问文件的访问时间
filesize:取得文件的大小,文件大小以字节数表示
unlink:文件删除
rmdir:文件夹删除,如果不为空或者没有权限则会提示失败
如果文件夹中存在文件,可以先循环删除目录中的所有文件,然后再删除该目录,循环删除可以使用glob函数遍历所有文件
foreach(glob("*") as $filename){
unlink($filename);
}