`
balaschen
  • 浏览: 192224 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

sessionId产生方法参考

阅读更多

tomcat

java 代码
  1. protected synchronized String generateSessionId() {   
  2.   
  3.         byte random[] = new byte[16];   
  4.   
  5.         // Render the result as a String of hexadecimal digits   
  6.         StringBuffer result = new StringBuffer();   
  7.         int resultLenBytes = 0;   
  8.         while (resultLenBytes < this.sessionIdLength) {   
  9.             getRandomBytes(random);   
  10.             random = getDigest().digest(random);   
  11.             for (int j = 0;   
  12.                     j < random.length && resultLenBytes < this.sessionIdLength;   
  13.                     j++) {   
  14.                 byte b1 = (byte) ((random[j] & 0xf0) >> 4);   
  15.                 byte b2 = (byte) (random[j] & 0x0f);   
  16.                 if (b1 < 10)   
  17.                     result.append((char) ('0' + b1));   
  18.                 else  
  19.                     result.append((char) ('A' + (b1 - 10)));   
  20.                 if (b2 < 10)   
  21.                     result.append((char) ('0' + b2));   
  22.                 else  
  23.                     result.append((char) ('A' + (b2 - 10)));   
  24.                 resultLenBytes++;   
  25.             }   
  26.         }   
  27.         return (result.toString());   
  28.   
  29.     }  

 

hibernate uuid:

java 代码
  1. public abstract class AbstractUUIDGenerator implements IdentifierGenerator {   
  2.   
  3.     private static final int IP;   
  4.     static {   
  5.         int ipadd;   
  6.         try {   
  7.             ipadd = BytesHelper.toInt( InetAddress.getLocalHost().getAddress() );   
  8.         }   
  9.         catch (Exception e) {   
  10.             ipadd = 0;   
  11.         }   
  12.         IP = ipadd;   
  13.     }   
  14.     private static short counter = (short0;   
  15.     private static final int JVM = (int) ( System.currentTimeMillis() >>> 8 );   
  16.   
  17.     public AbstractUUIDGenerator() {   
  18.     }   
  19.   
  20.     /**  
  21.      * Unique across JVMs on this machine (unless they load this class  
  22.      * in the same quater second - very unlikely)  
  23.      */  
  24.     protected int getJVM() {   
  25.         return JVM;   
  26.     }   
  27.   
  28.     /**  
  29.      * Unique in a millisecond for this JVM instance (unless there  
  30.      * are > Short.MAX_VALUE instances created in a millisecond)  
  31.      */  
  32.     protected short getCount() {   
  33.         synchronized(AbstractUUIDGenerator.class) {   
  34.             if (counter<0) counter=0;   
  35.             return counter++;   
  36.         }   
  37.     }   
  38.   
  39.     /**  
  40.      * Unique in a local network  
  41.      */  
  42.     protected int getIP() {   
  43.         return IP;   
  44.     }   
  45.   
  46.     /**  
  47.      * Unique down to millisecond  
  48.      */  
  49.     protected short getHiTime() {   
  50.         return (short) ( System.currentTimeMillis() >>> 32 );   
  51.     }   
  52.     protected int getLoTime() {   
  53.         return (int) System.currentTimeMillis();   
  54.     }   
  55.   
  56.   
  57. }   
  58.   
  59. public class UUIDHexGenerator extends AbstractUUIDGenerator implements Configurable {   
  60.   
  61.     private String sep = "";   
  62.   
  63.     protected String format(int intval) {   
  64.         String formatted = Integer.toHexString(intval);   
  65.         StringBuffer buf = new StringBuffer("00000000");   
  66.         buf.replace( 8-formatted.length(), 8, formatted );   
  67.         return buf.toString();   
  68.     }   
  69.   
  70.     protected String format(short shortval) {   
  71.         String formatted = Integer.toHexString(shortval);   
  72.         StringBuffer buf = new StringBuffer("0000");   
  73.         buf.replace( 4-formatted.length(), 4, formatted );   
  74.         return buf.toString();   
  75.     }   
  76.   
  77.     public Serializable generate(SessionImplementor session, Object obj) {   
  78.         return new StringBuffer(36)   
  79.             .append( format( getIP() ) ).append(sep)   
  80.             .append( format( getJVM() ) ).append(sep)   
  81.             .append( format( getHiTime() ) ).append(sep)   
  82.             .append( format( getLoTime() ) ).append(sep)   
  83.             .append( format( getCount() ) )   
  84.             .toString();   
  85.     }   
  86.   
  87.     public void configure(Type type, Properties params, Dialect d) {   
  88.         sep = PropertiesHelper.getString("separator", params, "");   
  89.     }   
  90.   
  91.     public static void main( String[] args ) throws Exception {   
  92.         Properties props = new Properties();   
  93.         props.setProperty("separator""/");   
  94.         IdentifierGenerator gen = new UUIDHexGenerator();   
  95.         ( (Configurable) gen ).configure(Hibernate.STRING, props, null);   
  96.         IdentifierGenerator gen2 = new UUIDHexGenerator();   
  97.         ( (Configurable) gen2 ).configure(Hibernate.STRING, props, null);   
  98.   
  99.         for ( int i=0; i<10; i++) {   
  100.             String id = (String) gen.generate(nullnull);   
  101.             System.out.println(id);   
  102.             String id2 = (String) gen2.generate(nullnull);   
  103.             System.out.println(id2);   
  104.         }   
  105.   
  106.     }   
  107.   
  108. }   
分享到:
评论

相关推荐

    在asp.net中使用session常见问题集锦

    例如,当用户重新登录、应用程序池回收或者Session超时后,新的Session将被创建,从而产生一个新的Session ID。如果发现Session ID频繁变化,可能是因为配置不正确或是存在某些错误。 #### ASP与ASP.NET之间是否...

    postman模拟访问具有Session的post请求方法

    以上这篇postman模拟访问具有Session的post请求方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网。 您可能感兴趣的文章:Postman模拟发送带token的请求方

    CakePHP框架Session设置方法分析

    - `renew`:通过创建新的Session ID,删除原有的ID,并将原有Session中的数据信息更新到新的Session中; - `setFlash(string$flashMessage, string$layout='default', array$params, string$key='flash')`:将`$...

    jdbc基础和参考

    对持久对象的更动,会对数据库中的数据产生影响。(自动脏检查机制) Detached(托管状态): 1.和Session失去关联 2.数据库中有对应记录存在 3.对托管对象的更动,在托管期间不会影响数据库,但是将托管状态重新和...

    DBA常用sql语句参考

    SELECT sid, serial#, status FROM v$session WHERE audsid=userenv('sessionid'); ``` SID(System Identifier)和Serial#是会话的标识符,这个查询用于识别当前用户会话。 8. **查看当前数据库的字符集**: `...

    企业面试题汇总_net方向.doc 面试者可以下载参考

    解决session丢失的方法 - **设置合理的超时时间**。 - **使用Cookie保持会话ID**。 - **禁用浏览器缓存**。 - **确保HTTPS的安全性**。 #### 28. 输出"Hello, World!"的函数 - **示例代码** (C#): ```csharp ...

    javaEE课程设计-试卷分析报告产生系统.pdf

    参考文献的引用表明了学生们在设计过程中可能参考的技术资料和教程,帮助他们在遇到问题时找到解决方案。最后,成绩评定部分是对整个设计项目的评价,包括代码质量、功能实现和文档完整性等方面。 总的来说,这个...

    DB33T 938-2014 政府网站运维绩效评测规范.pdf

    - **点击数/页面浏览量/独立用户数**:分别指访问页面产生的Web访问记录、网页被访问的次数以及一天内不同IP地址、UserAgent和SessionID的用户数量。 - **访问者数/平均访问时间/搜索引擎摘录量**:分别指独立用户的...

    (完整版)2019最新Java面试题,常见面试题及答案汇总 (2).docx

    70. **session的工作原理**:服务器通过sessionID识别用户会话,客户端通过cookie保存sessionID。 71. **防范SQL注入**:使用预编译语句(PreparedStatement)、参数绑定、输入验证等方式。 72-73. **XSS与CSRF**:...

    springmybatis

    2. 由sessionfactory 产生 session 3. 在session 中完成对数据的增删改查和事务提交等. 4. 在用完之后关闭session 。 5. 在java 对象和 数据库之间有做mapping 的配置文件,也通常是xml 文件。 mybatis实战教程...

    DWR.xml配置文件说明书(含源码)

    假设有个bean并且通过语句设置成远程可用,有种类型的参数他本身是一个带有setter的java bean,但setter会产生严重的隐患.攻击者可能促使这隐患的发生.通过下面的语句就可以设置但个类的bean converter 要想允许转换...

    面试技巧之性能测试50问.docx

    A12:关联是处理动态数据的关键,例如从服务器返回的session ID。LR提供了多种关联方法,如自动关联、手动关联和正则表达式关联。我们会根据实际情况选择合适的方法,确保每个请求都能正确地使用前一个请求产生的...

    在新版本的 PHP 中使用旧的 PHP 代码.docx

    例如,如果你想获取通过GET方法传递的参数,以前可能写成`$id = $HTTP_GET_VARS['id'];`,现在应改为`$id = $_GET['id'];`。同样,对于POST数据,应该使用`$_POST['id']`而不是`$HTTP_POST_VARS['id']`。 其次,另...

    springboot防重复提交工具包

    在Spring Boot应用中,防重复提交是一个重要的功能,特别是在高并发和事务一致性要求较高的场景下。这个名为"springboot防重复提交工具包"的资源很...具体使用方法可能需要参考包内的文档或示例代码进行学习和实践。

    v$sql_plan[总结].pdf

    获自EXPLAIN PLAN语句的执行计划跟具体执行的计划可以不同,因为 cursor 可能被不同的session 参数值编译(如, HASH_AREA_SIZE)。 通过V$SQL_PLAN视图,可以: 1. 确认当前的执行计划 2. 鉴别创建表索引效果 3. ...

    hibernate入门教程

    这段代码首先打开一个 `Session` 并开始一个事务,然后创建一个新的 `Event` 对象并设置其属性值,接着使用 `Session` 的 `save` 方法将该对象保存到数据库中,最后提交事务并关闭 `Session`。 #### 五、编写高效 ...

    Excel导入SQL数据库

    A: 同一用户生成的Excel文件用同一个文件名,文件名可用用户ID号或SessionID号等可确信不重复字符串组成。这样新文件生成时自动覆盖上一文件。 B: 在Global.asa文件中设置Session_onEnd事件激发时,删除这个用户的...

    jpivot学习总结.doc

    formatter 采用类来对该 Measure 的值进行格式,具体参考 Level 的 formatter 属性。 caption 标题,用来显示时使用。 4. JPivot标签库使用详解 4.1. Introduce JPivot 是一套基于 Mondrian 的 OLAP 前端展现...

    程序员面试常用宝典,方便找工作

    3. **多态**:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在.NET中,多态可以通过接口实现或通过继承并重写基类方法来实现。 **抽象类**:抽象类是一种不能被实例化的类,通常包含一个或多...

Global site tag (gtag.js) - Google Analytics