java session用法有哪些?实现原理是什么?

TheDisguiser 2020-07-01 16:37:38 java常见问答 8195

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常见问题,就请记得来我们网站看看吧。

推荐阅读:

java session共享,session如何实现共享?

java session时长问题,java设置session超时时间实例

session对象的作用是什么?有什么作用?