Session作为web开发中最主要的会话对象,是我们一定要掌握的,小伙伴们知道session有哪些用法吗?它的实现原理是什么呢?下面就来看看吧。
Session用法
1)、cookie存储中
我们在浏览器使用cookie存储SessionID的时候,都会写上存储周期,因为cookie有定时和临时的区分,临时就是指关闭浏览器对应的cookie就会被删除,所以我们通常都会给需要存储信息的指定cookie添加一个过期的时间。有时候用户会禁用浏览器的cookie功能,这个时候我们就要依赖于第二种方式了。
2)、URL重写
在用户禁用浏览器cookie时,我们就可以使用url重写的方法,把对应的sessionID附加网址之后,这样在访问下一个页面的时候,我们也可以获取到对应的SessionID。
https://www.itbiancheng.com/sess.php?Session=q78sb9c7539nt9jho7lnplr951
下面我们可以用一个实例来更加清楚的了解了解:
<?php //本来不需要写session_start(); if(isset($_GET['PHPSESSID'])){ session_id($_GET['PHPSESSID']); } session_start(); $sid=session_id();//当然也可以用全局变量系统提供的SID,所以下面要这样写&".SID." echo "<a href='Demo01process.php?bookid=sn001&bookname=tlbb&PHPSESSID=$sid'>天龙八部</a> "; echo "<br/><a href='Demo01process.php?bookid=sn002&bookname=sgyy&PHPSESSID=$sid'>三国演绎</a>"; echo "<br/><a href='showCart.php?PHPSESSID=$sid'>查看商品列表</a>"; ? > ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** * Demo01process.php ** ** ** ** * <?php echo "<br/> < h1 > ** ** ** ** ** ** ** 购买成功了, 放入session ** ** ** ** ** ** </h1> < br / > "; if (isset($_GET['PHPSESSID'])) { session_id($_GET['PHPSESSID']); } session_start(); $sid = session_id(); $bookid = $_GET['bookid']; $bookname = $_GET['bookname']; $_SESSION[$bookid] = $bookname; echo "<br/><hr>"; echo "<br/>购买商品成功"; echo "<br/><a href='index.php?PHPSESSID=$sid'>返回购物大厅继续购买</a>"; //这里返回就是关键,在把$sid传回到首页,首页在if判断,反正这个if判断哪里都有 ? > ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** * 以上 下面是正常获得session操作 < ? php echo "<a href='Demo01process.php?bookid=sn001&bookname=tlbb'>天龙八部</a>"; echo "<br/><a href='Demo01process.php?bookid=sn002&bookname=sgyy'>三国演绎</a>"; echo "<br/><a href='showCart.php'>查看商品列表</a>"; ? > ** ** ** ** ** ** ** ** ** ** ** <?php echo "<br/> < h1 > ** ** ** ** ** ** ** 购买成功了, 放入session ** ** ** ** ** ** </h1> < br / > "; session_start(); $bookid = $_GET['bookid']; $bookname = $_GET['bookname']; $_SESSION[$bookid] = $bookname; echo "<br/><hr>"; echo "<br/>购买商品成功"; echo "<br/><a href='jsToDemo01.php'>返回购物大厅</a>"; ? > ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** * <?php echo "<h1>购物商品列表</h1> "; session_start(); foreach($_SESSION as $key => $val) { echo "<br/>$key---$val"; } ? > ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** 完成 ** ** ** * 下面是合法验证 login.php-- -- -- -- --loginProcess.php[ if (合法) 跳转并把信息保存到session]-- -- -- -- -- --logininfo(session) -- -- - 合法--才到-- - empManage.php -- -- -- -- -- -- -- -- -- - loginProcess.php不合法返回ogin.php 每个模式里面都有一个小文件里面都是常用的小函数cpmmon.php, 所以把验证的函数也封装到里面, 因为每个页面都要用 例: function checkUserValidate() { session_start(); if (empty($_SESSION['loginUser'])) { header("Location:index.php?errno=1"); //只要是没登录成功过的,都打回登录页面 } } ** ** ** ** ** ** ** ** 然后要防止的地方加上这个就可以 require_once 'common.php'; checkUserValidate(); 别忘了在用户名密码验证成功的地方 session_start(); $_SESSION['loginUser'] = $id_admin; 开启session
Session实现原理
我们在创建完session后,就要把session的id号以cookie的形式回写给客户机,这样,只要客户机的浏览器不关,再去访问服务器时,就都会带着session的id号去,服务器发现客户机浏览器带session id过来了,就会使用内存中与之对应的session为之服务。代码如下:
package xdp.gacl.session; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class SessionDemo1 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("UTF=8"); response.setContentType("text/html;charset=UTF-8"); //使用request对象的getSession()获取session,如果session不存在则创建一个 HttpSession session = request.getSession(); //将数据存储到session中 session.setAttribute("data", "孤傲苍狼"); //获取session的Id String sessionId = session.getId(); //判断session是不是新创建的 if (session.isNew()) { response.getWriter() .print("session创建成功,session的id是:" + sessionId); } else { response.getWriter() .print("服务器已经存在该session了,session的id是:" + sessionId); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
以上就是关于session及实现原理的所有内容,你应该清楚了吧,如果还需要了解一些session常见问题,就请记得来我们网站看看吧。
推荐阅读: