`
buluzhai
  • 浏览: 108641 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

用php生成Session ID 和随机密码

阅读更多
当我们要辨识网站的一位用户,以提供给他在应用中独有的使用体验,这时候我们需要一个Session  ID,这个ID是独一无二的.

另外一些情况下我们也需要给用户产生一个独一无二的令牌,比如用户注册的时候我们发给他确认邮件的时候,提供一个令牌让他用来验证。这些令牌的产生和Session ID是类似的
下面我们就来看一下怎么样生成这样的令牌,然后我们再看怎么生成随机密码

生成令牌
下面的genToken()函数接受两个参数,$len用于规定令牌的长度,$md5是个布尔值,用于选择是否使用md5。
 
 
      function genToken( $len = 32, $md5 = true ) {
       # Seed random number generator
          # Only needed for PHP versions prior to 4.2
          mt_srand( (double)microtime()*1000000 );
          # Array of characters, adjust as desired
          $chars = array(
              'Q', '@', '8', 'y', '%', '^', '5', 'Z', '(', 'G', '_', 'O', '`',
              'S', '-', 'N', '<', 'D', '{', '}', '[', ']', 'h', ';', 'W', '.',
              '/', '|', ':', '1', 'E', 'L', '4', '&', '6', '7', '#', '9', 'a',
              'A', 'b', 'B', '~', 'C', 'd', '>', 'e', '2', 'f', 'P', 'g', ')',
              '?', 'H', 'i', 'X', 'U', 'J', 'k', 'r', 'l', '3', 't', 'M', 'n',
              '=', 'o', '+', 'p', 'F', 'q', '!', 'K', 'R', 's', 'c', 'm', 'T',
              'v', 'j', 'u', 'V', 'w', ',', 'x', 'I', '$', 'Y', 'z', '*'
          );
          # Array indice friendly number of chars; 
          $numChars = count($chars) - 1; $token = '';
          # Create random token at the specified length
          for ( $i=0; $i<$len; $i++ )
              $token .= $chars[ mt_rand(0, $numChars) ];

          # Should token be run through md5?

          if ( $md5 ) {

              # Number of 32 char chunks
              $chunks = ceil( strlen($token) / 32 ); $md5token = '';

              # Run each chunk through md5

              for ( $i=1; $i<=$chunks; $i++ )

                  $md5token .= md5( substr($token, $i * 32 - 32, 32) );

              # Trim the token

              $token = substr($md5token, 0, $len);

          } return $token;

      }


下面我们来看生成随机密码
genPasswd()函数接受两个参数,$len是密码长度,$special让你决定是否在密码中包含特殊字符。

  
   function genPasswd( $len = 8, $special = true ) {
 
          # Seed random number generator

          # Only needed for PHP versions prior to 4.2
          mt_srand( (double)microtime()*1000000 );
 
          # Array of digits, lower and upper characters; empty passwd string

          $passwd = '';

          $chars = array(

              'digits' => array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9),

              'lower' => array(
                  'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
                  'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'
              ),
              'upper' => array(
                  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
                  'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
              )
          );

          # Add special chars to array, if permitted; adjust as desired
          if ( $special ) $chars['special'] = array(
              '!', '@', '#', '$', '%', '^', '&', '*', '_', '+'
          );

          # Array indices (ei- digits, lower, upper)
          $charTypes = array_keys($chars);
          # Array indice friendly number of char types
          $numTypes = count($charTypes) - 1;
          
          # Create random password
          for ( $i=0; $i<$len; $i++ ) {

              # Random char type

              $charType = $charTypes[ mt_rand(0, $numTypes) ];

              # Append random char to $passwd

              $passwd .= $chars[$charType][

                  mt_rand(0, count( $chars[$charType] ) - 1 )

              ];

          } return $passwd;
      }

分享到:
评论

相关推荐

    php生成SessionID和图片校验码的思路和实现代码

    /****** 产生Session ID ******/ 基本的思路: 是把当前微秒的时间获取, 然后产生以个随机数字, 把随机数字和当前时间相加后加密一下, 最后再截取需要的长度 /* 函数名称:create_sess_id() 函数作用:产生以个随机的...

    关于PHP5 Session生命周期介绍

    它是通过 Session ID 来判断的,什么是 Session ID,就是那个 Session 文件的文件名,Session ID 是随机生成的,因此能保证唯一性和随机性,确保Session 的安全。一般如果没有设置 Session 的生存周期,则 Session ...

    php随机数字字母图片验证码生成器

    html页使用如下代码: &lt;img id="codeimg" name="codeimg" src="code.php" height="24" class="Img_m" /&gt; 然后php调用$_SESSION['SafeCode']

    PHP中session跨子域的三种实现方法

    另一个是标志着Session数据的Session Id,Session ID,就是那个 Session 文件的文件名,Session ID 是随机生成的,因此能保证唯一性和随机性,确保 Session 的安全。一般如果没有设置 Session 的生存周期,

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    实例052 使用位运算对数字进行加密和解密 83 2.3 包含语句 84 实例053 提高代码重用率 84 实例054 包含数据库连接文件 85 实例055 包含网站头文件 86 实例056 包含网站尾文件 87 实例057 包含网站的主文件 88 2.4 ...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    实例052 使用位运算对数字进行加密和解密 83 2.3 包含语句 84 实例053 提高代码重用率 84 实例054 包含数据库连接文件 85 实例055 包含网站头文件 86 实例056 包含网站尾文件 87 实例057 包含网站的主文件 88 2.4 ...

    PHP开发实战1200例源码

    实例052 使用位运算对数字进行加密和解密 83 2.3 包含语句 84 实例053 提高代码重用率 84 实例054 包含数据库连接文件 85 实例055 包含网站头文件 86 实例056 包含网站尾文件 87 实例057 包含网站的主文件 88 2.4 ...

    邓炜PHP基本语法(五)状态维持上

    在PHP中,每个用户的状态都是唯一的,而用于标识状态的ID是一个经过加密的随机字符串,它由PHP自动生成,在状态的生命周期中会保存在客户端或服务器端。我们通常用PHP中的Cookie将它保存在客户端,用Session把它...

    Discuz 2.5 最新版

    Discuz! X2.5新版本推出四大新体系:新社区形态、新技术体系、新门户系统以及新移动化体验,...FIX 管理员在版块前台管理面板中更新推荐主题时,原主题推荐者ID被修改为管理员ID的问题(14039) FIX soso表情更换新域名

    网管教程 从入门到精通软件篇.txt

    只有在使用故障恢复控制台时,才能使用 fixboot 命令。  fixboot [drive]  参数 驱动器  将要写入引导扇区的驱动器。它将替代默认的驱动器(即用户登录的系统分区)。例如,驱动器:D:  范例  下列命令...

Global site tag (gtag.js) - Google Analytics