PHP入门之字符串、Cookie和Session简介

一,字符串(详情见,代码注释)
   
   
  1. /* ---------------------定义--------------------- */
  2. $strA = 'hello world A';
  3. $strB = "hello world B";
  4. $strC = <<<Fuck
  5. hello world C
  6. Fuck;
  7. echo $strA . "--" . $strB . "---" . $strC . "\n";
  8. /* ---------------------除去空格--------------------- */
  9. $space = " space sample ";
  10. echo trim($space) . "0 \n"; // 除去 两边空格
  11. echo rtrim($space) . "0 \n"; // 除去 右边空格
  12. echo ltrim($space) . "0 \n"; // 除去 左边空格
  13. /* ---------------------计算长度--------------------- */
  14. $strD = " space sample ";
  15. echo strlen($strD) . "\n"; // 计算长度
  16. echo mb_strlen($strD, "utf8") . "\n"; // 按照固定编码,计算长度
  17. /* ---------------------截取--------------------- */
  18. $subA = 'Fuck The Sing';
  19. $SubB = '你怎么知道不好听';
  20. echo substr($subA, 2, 4) . "\n";
  21. echo mb_substr($SubB, 2, 4, 'utf8') . "\n";
  22. /* ---------------------查找--------------------- */
  23. $queryA = 'Fuck The Sing';
  24. echo strpos($queryA, 'The') . "\n"; // 区分大小写
  25. /* ---------------------替换--------------------- */
  26. $replace = 'Fuck The Sing';
  27. echo str_replace('the', 'a', $replace) . "\n";
  28. /* ---------------------格式化--------------------- */
  29. $formatA = '100.1';
  30. echo sprintf('%01.3f', $formatA) . "\n"; // 0:占位符, 1:总共1位以上 , 3:三位以上, f:结尾
  31. /* ---------------------合并 + 分割--------------------- */
  32. $splitA = 'sun-moon-star';
  33. $splitB = 'the result';
  34. echo implode('-', array(
  35. $splitA,
  36. $splitB
  37. )) . "\n";
  38. print_r(explode('-', $splitA));
  39. /* ---------------------转义--------------------- */
  40. $escapeA = "What's the fuck mean?";
  41. echo addslashes($escapeA) . "\n"; // 输出转义字符

二、Cookie
1,简介
----  Cookie是存储在客户端浏览器中的数据,我们通过Cookie来跟踪与存储用户数据。
    
    
  1. setcookie('test', time());
  2. ob_start();
  3. print_r($_COOKIE);
  4. $content = ob_get_contents();
  5. $content = str_replace(" ", '&nbsp;', $content);
  6. ob_clean();
  7. header("content-type:text/html; charset=utf-8");
  8. echo '当前的Cookie为:<br>';
  9. echo nl2br($content);

2,设置cookie
1)PHP设置Cookie最常用的方法就是使用setcookie函数,setcookie具有7个可选参数,我们常用到的为前5个:
    name( Cookie名)可以通过$_COOKIE['name'] 进行访问
    value(Cookie的值)
    expire(过期时间)Unix时间戳格式,默认为0,表示浏览器关闭即失效
    path(有效路径)如果路径设置为'/',则整个网站都有效
    domain(有效域)默认整个域名都有效,如果设置了'www.imooc.com',则只在www子域中有效
     
     
  1. $value = 'test';
  2. setcookie("TestCookie", $value);
  3. setcookie("TestCookie", $value, time()+3600); //有效期一小时
  4. setcookie("TestCookie", $value, time()+3600, "/path/", "imooc.com"); //设置路径与域
2)PHP中还有一个设置Cookie的函数setrawcookie,setrawcookie跟setcookie基本一样;
唯一的不同就是value值不会自动的进行urlencode,因此在需要的时候要手动的进行urlencode
     
     
  1. setrawcookie('cookie_name', rawurlencode($value), time()+60*60*24*365);
3)因为Cookie是通过HTTP标头进行设置的,所以也可以直接使用header方法进行设置。
     
     
  1. header("Set-Cookie:cookie_name=value");

3,删除cookie
1)在PHP中删除cookie也是采用setcookie函数来实现
可以看到将cookie的过期时间设置到当前时间之前,则该cookie会自动失效,也就达到了删除cookie的目的
     
     
  1. setcookie('test', '', time()-1);
2)也可以直接通过header来删除cookie
     
     
  1. header("Set-Cookie:test=1393832059; expires=".gmdate('D, d M Y H:i:s \G\M\T', time()-1));

4,设置有效路径
cookie中的路径用来控制设置的cookie在哪个路径下有效,默认为'/',在所有路径下都有
以下设置会使test在/path以及子路径/path/abc下都有效,但是在根目录下就读取不到test的cookie值
     
     
  1. setcookie('test', time(), 0, '/path');

5,cookie与session的异同
cookie将数据存储在客户端,建立起用户与服务器之间的联系,通常可以解决很多问题,但是cookie仍然具有一些局限:
    cookie相对不是太安全,容易被盗用导致cookie欺骗
    单个cookie的值最大只能存储4k
    每次请求都要进行网络传输,占用带宽

session是将用户的会话数据存储在服务端,没有大小限制,通过一个session_id进行用户识别,
PHP默认情况下session id是通过cookie来保存的,因此从某种程度上来说,seesion依赖于cookie。
但这不是绝对的,session id也可以通过参数来实现,只要能将session id传递到服务端进行识别的机制都可以使用session。

三、Session
1,简介
session是将用户的会话数据存储在服务端,没有大小限制,通过一个session_id进行用户识别

2,使用
PHP中使用session非常简单,先执行session_start方法开启session,然后通过全局变量$_SESSION进行session的读写
      
      
  1. session_start();
  2. $_SESSION['test'] = time();
  3. var_dump($_SESSION);
session会自动的对要设置的值进行encode与decode,因此session可以支持任意数据类型,包括数据与对象等

默认情况下,session是以文件形式存储在服务器上的,因此当一个页面开启了session之后,会独占这个session文件,
这样会导致当前用户的其他并发访问无法执行而等待。可以采用缓存或者数据库的形式存储来解决这个问题

3,删除和销毁
1)删除某个session值可以使用PHP的unset函数,删除后就会从全局变量$_SESSION中去除,无法访问。
      
      
  1. session_start();
  2. $_SESSION['name'] = 'jobs';
  3. unset($_SESSION['name']);
  4. echo $_SESSION['name']; //提示name不存在
2)如果要删除所有的session,可以使用session_destroy函数销毁当前session,session_destroy会删除所有数据,但是session_id仍然存在
      
      
  1. session_start();
  2. $_SESSION['name'] = 'jobs';
  3. $_SESSION['time'] = time();
  4. session_destroy();

说明:
   
    如果需要同时销毁cookie中的session_id,通常在用户退出的时候可能会用到,则还需要显式的调用setcookie方法删除session_id的cookie值。

4,案例:存储用户的登录信息
    session可以用来存储多种类型的数据,因此具有很多的用途,常用来存储用户的登录信息,购物车数据,或者一些临时使用的暂存数据等。
    session的数据存放在服务器,安全性较高
      
      
  1. session_start();
  2. //假设用户登录成功获得了以下用户数据
  3. $userinfo = array(
  4. 'uid' => 10000,
  5. 'name' => 'spark',
  6. 'email' => 'spark@imooc.com',
  7. 'sex' => 'man',
  8. 'age' => '18'
  9. );
  10. header("content-type:text/html; charset=utf-8");
  11. /* 将用户信息保存到session中 */
  12. $_SESSION['uid'] = $userinfo['uid'];
  13. $_SESSION['name'] = $userinfo['name'];
  14. $_SESSION['userinfo'] = $userinfo;
  15. //* 将用户数据保存到cookie中的一个简单方法 */
  16. $secureKey = 'imooc'; //加密密钥
  17. $str = serialize($userinfo); //将用户信息序列化
  18. //用户信息加密前
  19. $str = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($secureKey), $str, MCRYPT_MODE_ECB));
  20. //用户信息加密后
  21. //将加密后的用户数据存储到cookie中
  22. setcookie('userinfo', $str);
  23. //当需要使用时进行解密
  24. $str = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($secureKey), base64_decode($str), MCRYPT_MODE_ECB);
  25. $uinfo = unserialize($str);
  26. echo "解密后的用户信息:<br>";
  27. print_r($uinfo);

5,cookie和session的异同
cookie将数据存储在客户端,建立起用户与服务器之间的联系,相对不安全,且最大4k,每次请求都要进行网络传输
session是将用户的会话数据存储在服务端,相对安全,没有大小限制,通过一个session_id进行用户识别

PHP默认情况下session id是通过cookie来保存的,因此从某种程度上来说,seesion依赖于cookie
但这不是绝对的,session id也可以通过参数来实现,只要能将session id传递到服务端进行识别的机制都可以使用session。


有技术上的问题,或者想法,欢迎来交流
QQ联系:957339173@qq.com  // 备注 CSDN
github:https://github.com/yline






















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值