zoukankan      html  css  js  c++  java
  • session介绍

    1、session是什么

      由于cookie 是存在用户端,而且它本身存储的尺寸大小也有限,最关键是用户可以是可见的,并可以随意的修改,很不安全。那如何又要安全,又可以方便的全局读取信息呢?于是,这个时候,一种新的存储会话机制:session 诞生了。

      Session在网络应用中,称为“会话控制”。是一种服务区存储数据的方式,它存在服务器的/tmp 目录下Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。通俗理解就是,它就是在一次会话中解决2次HTTP的请求的关联,让它们产生联系,让2两个页面都能读取到找个这个全局的session信息。session信息存在于服务器端,所以也就很好的解决了安全问题。 

    2、运行机制

    (1)当一个session第一次被启用时,一个唯一的标识被存储于本地的cookie中。
    (2)首先使用session_start()函数,PHP从session仓库中加载已经存储的session变量。
    (3)当执行PHP脚本时,通过使用session_register()函数注册session变量。
    (4)当PHP脚本执行结束时,未被销毁的session变量会被自动保存在本地一定路径下的session库中,这个路径可以通过php.ini文件中的session.save_path指定,下次浏览网页时可以加载使用。
     
    详述:

    session_start();这是个无任何返回值的函数,既不会报错,也不会成功。它的作用是开启session,并随机生成一个唯一的32位的session_id,唯一的session_id 来标识绑定一个用户。这样就可区分服务器是哪个用户在访问。

    每次我们访问一个页面,如果有开启session,也就是有session_start() 时,就会自动生成一个session_id 来标注是这次会话的唯一ID,同时也会自动往cookie里写入一个名字为PHPSESSID的变量,它的值正是session_id,先存入cookie中的PHPSESSID中,再生成一个sess_前缀文件。当有写入$_SESSION的时候,就会往sess_文件里序列化写入数据。当读取的session变量的时候,先会读取cookie中的PHPSESSID,获得session_id,然后再去找这个sess_sessionid文件,来获取对应的数据。

    当这次会话没结束,再次访问的时候,服务器会去读取这个PHPSESSID的cookie是否有值有没过期,如果能够读取到,则继续用这个session_id,如果没有,就会新生成一个session_id,同时生成PHPSESSID这个cookie。由于默认生成的这个PHPSESSID cookie是会话,也就是说关闭浏览器就会过期掉,所以,下次重新浏览时,会重新生成一个session_id和sess_这个文件。

    3、主要特点

    1、不是线程安全的,应该避免多个线程共享同一个Session实例
    2、Session实例是轻量级的,所谓轻量级,是指他的创建和删除不需要消耗太多资源。
    3、Session对象内部有一个缓存,被称为Hibernate第一缓存,他存放被当前工作单元中加载的对象,每个Session实例都有自己的缓存。
    4、Session是JAVA应用程序和Hibernate进行交互时使用的主要接口,它也是持久化操作核心API。
    5、Session对象是有生命周期的,它以Transaction对象的事务开始和结束边界。
     
      这里的Session与传统意思上web层的HttpSession并没有关系,Hibernate Session之于Hibernate,相当于JDBC Connection相对与JDBC。
      Session作为贯穿Hibernate的持久化管理器核心,提供了众多的持久化的方法,如save(),update,delete,find(Hibernate 3中已经取消了此方法,)等,通过这些方法我们可以透明的完成对象的增删改查(CRUD-- create read update delete),这里所谓的透明是指,Session在读取,创建和删除映射的实体对象的实例时,这一系列的操作将被转换为对数据库表中数据的增加,修改,查询和删除操作。
     
    4、主要方法
    public Transaction beginTransaction() throws HibernateException:返回和当前Session对象相互联系的Transaction对象(表示在数据库中重新开始一个事务)
    public Transaction getTransaction():返回和当前session联系的Transaction对象
    public Connection connection close() throws HibernateExcepton:结束当前的Session对象
    public void clear() :清空Session,清除所有保存在当前Session缓存中的实体对象,终止所有正在执行的方法(eg: save(),update(),delete() .....)
    public Serializable save(Object object)throws HibernateException 对当前参数指定的对象进行持久化(系统会首先赋予参数对象一个标识符OID),相当于insert语句 
    public Connection connection() throws HibernateException 得到当前Session 中包含的Connection对象
    public boolean contains(Object object):判断参数给出的对象(持久化类)是否在当前Session的缓存中
    public void evict(Object object) throws HibernateException :将参数给出的Object从当前Session对象类中删除,使这个对象从持久态变成游离态,这种状态的改变不会引起对数据库的同步
    public Object load(Class theclass,Serializable id) throws HibernateException 返回第一个参数指定类对应的表中,第二个参数指定的行(第二个参数就是要取得对象的OID,他对应表中主键列的值)
    public void update(Object object) throws HibernateException :更新一个对象到数据库中,
    public void delete (Object object)throws HibernateException:从数据库中删除和参数指定的对象对应的记录
    public Object get(Class class,Serializable id) throws HibernateException:和load()方法一样区别在于,如果数据库表中没有对应的记录,get()方法返回null,load()方法将报异常
    参:https://blog.csdn.net/hjc1984117/article/details/53995816
  • 相关阅读:
    使用Hibernate Validator来帮你做数据校验
    关于Picasso load本地图片显示失败的探究
    Android 动画机制与使用技巧
    Android-Volley详解
    源码级分析Android系统启动流程
    Android端百度地图API使用详解
    Eclipse中R文件不能自动生成
    一天掌握Android JNI本地编程 快速入门
    网络编程之PC版与Android手机版带断点续传的多线程下载
    《MySQL必知必会》读书笔记
  • 原文地址:https://www.cnblogs.com/MnineJane/p/8641714.html
Copyright © 2011-2022 走看看