session用法是什么?原理是什么?

TheDisguiser 2020-04-23 18:08:34 java常见问答 8373

在web中如果想储存一个用户的各种信息,一般都会使用session来实现,今天我们就来了解session如何使用及它的原理都有哪些吧。

一、session简介

Session如字面意思一样是一个会话。在计算机中,由于HTTP协议是无状态协议,为了保持浏览器与服务器之间的联系,Session就诞生了。Session一般用于在服务器端保存用户状态的协议。通常会用来保存用户的登录状态。

二、Session原理

我们在搭建网站服务器的时候,通常会启用服务器的Session,这个时候当我们访问一个服务器上面的网站,服务器就要为该用户创建一个SESSION,在创建这个SESSION的时候,服务器会先查询这个用户是否创建过对应的Session ID,如果没有就创建,反之不创建。这个SESSION ID是唯一的、不重复的、不容易找到规律的字符串。SessionID通常以Cookie的形式存储在客户端。每次HTTP请求,SessionId都会随着Cookie被传递到服务器端,这样我们就可以通过这个SessionId取到对应的信息,来判断这个请求来自于哪个客户端/用户。

三、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的所有内容了,想了解更多Java入门相关知识的话请一直关注我们吧。