Session相关知识点(笔记)

Session是什么

from: Session 是什麼

Session机制类似: 顾客在饮料店点单后获取号码牌, 号码牌上有你点饮料的相关信息, 根据号码牌向店员索取自己所点的饮料

让Client取得号码牌:

  • 使用Cookie
  • 直接輸出並嵌入頁面之中的方法(就是要你把號碼背起來)

拿號碼牌去 Server 要資料:

  • 使用Cookie
  • 運用標準的 Query string/POST body方法
    (只要能把號碼傳到 Server 上,任何方法都行)

就算沒有 Cookie 的存在,Session 機制也可以正常運作(传递sessionid)

因为大多数浏览器实现了Cookie机制, 因此大多数网站预设采用Cookie发号码牌和兑换资料, 建立连接时把Cookie上传到Server, Server传回资料时带上Cookie

不使用Cookie实现session

通过隐藏表单传递sessionid - Hidden Form Fields

1
<input type = "hidden" name = "sessionid" value = "12345">

服务器发送含有sessionid的隐藏表单, 表单提交后该信息通过浏览器的GET/POST请求传递到服务器.

缺陷: 点击<a>标签不会发送表单

使用URL重写传递sessionid - URL Rewriting

类似以下形式:

http://tutorialspoint.com/file.htm;sessionid=12345

缺陷:

  • 无法共享URL(个人信息同时也被共享)
  • 破坏缓存
  • 第三方也能看到sessionid, 可能造成会话劫持, 不安全
  • 额外服务器负荷
  • 跳转其他站点/请求特定URL丢失信息
  • 访问同一站点若不存在特定值会导致信息丢失

php中: session.use_trans_sid = 1

这里的cookie, 指的是存储资料方式的不同, 不是指領號碼牌時, 是否有用到 cookie.

最原始session: 资料都存在server, 对于流量大的网站服务, 存在无数台server, 而client由哪个server提供服务是随机的, 因此不适合将资料放在server

cookie-based session 将资料暂存于cookie, client自己负责保存.

但是cookie 4kb size limit, 因此很多网站服务选择cookie-based与服务端存储并行.

这类cookie会被加密, 只有server能解, client无法存取, 因此安全性较高, 但还是有风险, 这也是采用并行存储的另一原因.

Session传值

利用session机制存储资料, 让不同页面间互传资料, 通常使用Query String或POST body等方法, 把资料往server传之后, 在server端将client上传的资料存在session中(?), 之后的连线后开启其他页面, 因为使用同一个号码牌(?), 所以在不同页面依然能读到前一次存储于session的状态. (?)

不理解 >>> url传值,cookie传值,session传值的笔记

PHP实现Session传值

Session通过为每个访问者创建一个独立的ID(UID)并储存基于UID的变量来运行。UID既存储在cookie中,又在URL中展现出来。

将用户信息存入PHP Session之前,必须先启动Session

1
2
3
4
<?php session_start(); ?>
<html>
<body></body>
</html>

存储Session变量

1
2
3
4
5
6
7
8
9
10
11
12
<?php session_start();
// store session data
$_SESSION['views']=1;
?>
<html>
<body>
<?php
//retrieve session data
echo "Pageviews=". $_SESSION['views'];
?>
</body>
</html>
1
2
3
4
5
6
7
<?php
session_start();
if(isset($_SESSION['views']))
$_SESSION['views']=$_SESSION['views']+1;
else
$_SESSION['views']=1;echo "Views=". $_SESSION['views'];
?>

删除session

释放指定session变量:

1
2
3
<?php 
unset($_SESSION['views']);
?>

将session全部删除:

1
2
3
<?php
session_destroy();
?>

参考