当我们要辨识网站的一位用户,以提供给他在应用中独有的使用体验,这时候我们需要一个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生成唯一RequestID类`是一种实用的解决方案,它利用了PHP内置的`session_create_id()`和`uniqid()`函数,确保了Request ID的唯一性。这种做法在大型分布式系统中尤其有价值,因为它能帮助我们追踪请求...
生成Session ID的目的是为了确保每个用户会话都能被准确地识别和区分,避免会话劫持或重放攻击。在给定的代码中,`create_sess_id()` 函数用于生成这种Session ID。 首先,该函数通过`microtime()`获取当前时间的...
$sessionId = session_id(); echo '当前会话ID为: ' . $sessionId; // 存储和读取会话数据 $_SESSION['username'] = 'John Doe'; echo '用户名: ' . $_SESSION['username']; ?> ``` 在这个例子中,首先我们通过 `...
2. 随机化SESSION ID:每次用户登录后生成新的SESSION ID,增加猜测难度。 3. 设置SESSION cookie为HttpOnly:阻止JavaScript脚本访问SESSION ID,减少通过XSS攻击获取SESSION的可能性。 4. 设置SESSION cookie为...
Session ID 是一个唯一的 32 位 ID 号,由 PHP 随机生成,并使用随机种子字符串进行加密。Session ID 可以将所有的会话区分出来,并可以在整个会话期内保持有效。 在 PHP 中,Session 变量可以使用 session_start()...
此 ID 是一个随机生成的字符串,用于区分不同的用户会话。Session ID 可以通过 Cookie 或 URL 参数等方式传递给客户端,并在后续请求中被发送回服务器。 **2. Session 数据** 用户在一次会话过程中所产生的状态...
在PHP编程中,主要体现在MD5()函数的使用上,主要是对用户名或密码通过MD5算法生成哈希值,从而提高安全性。 Session劫持是一种比较复杂的攻击方法,目前,在防XSS攻击、SQL注入漏洞攻击以及源码泄露等方面采取了...
- 使用安全的Session ID生成策略,避免可预测或弱随机性。 - 避免在URL中传递Session ID,以防被第三方捕获。 - 定期清理废弃的Session,避免内存或硬盘空间浪费。 - 对敏感数据进行加密存储,即使Session数据被...
通过对 `identifyingcode.php`、`testidentifyingcode.php` 和 `testidentifyingcode.html` 文件的详细分析,我们可以了解到如何使用PHP生成和验证验证码的基本流程。此外,还可以进一步改进和增强该系统的安全性与...
**PHP程序设计中的Session机制详解** 在PHP编程中,Session是一种非常重要的技术,它用于在用户的多次请求之间存储和共享数据。...正确地使用和管理Session,不仅可以提升用户体验,还能有效保障应用的安全性和效率。
6. **禁用Session ID预测**:使用PHP默认的随机Session ID生成器,或者自定义更复杂的生成算法,使得攻击者难以预测或生成有效的Session ID。 7. **监控和报警**:设置异常行为检测,如频繁的Session ID切换、异常...
由于只有一个文件名 "132684957359678351" 提供,这可能是随机生成的文件ID或日期时间戳,但无法直接判断其内容。通常情况下,一个PHP项目源码会包含多个文件,如index.php(入口文件)、database连接文件、用户认证...
Session ID的生成基于以下信息:客户端IP地址、当前的时间戳(包括秒和微秒)、以及PHP内部的随机数生成器产生的随机值。这种组合可以极大地降低Session ID冲突的可能性。 通过配置php.ini文件,可以改变Session ID...
默认情况下,Laravel使用cookie存储一个随机生成的session_id,然后将实际数据存储在服务器的文件系统或数据库中。然而,如果你的项目使用MongoDB作为主数据库,可能希望也将会话数据保存在MongoDB中,这就是laravel...
1. **Session ID的生成**:Session ID是一个随机字符串,它作为Session文件的文件名,存储在服务器的临时目录中。这个ID是基于一定的算法随机生成的,确保了每个用户的Session ID都是唯一的,增加了安全性。 2. **...
- **Session ID的生成**:使用随机性和唯一性高的算法生成Session ID,以防止Session劫持。 **5. 其他用户状态管理方式** 除了Session,还有Cookie、Token(JWT)等方式来管理用户状态。Cookie适用于轻量级状态...
2. `session_id_parse()`: 这个私有方法用于解析session ID,提取时间戳和随机密钥。它将16进制的session ID拆分成两部分,前8位代表创建时间,后32位是随机生成的密钥。 3. `close()`: 关闭session处理,通常在...
2. 当用户提交登录信息后,服务器端的脚本会对用户的登录信息(如用户名和密码)进行验证,如果验证通过,则开启会话(session_start()),并根据需要创建或修改存储在服务器上的Session变量($_SESSION数组)来保存...
- 用户打开浏览器访问网站,首次请求时,服务器创建一个新的session,并为该session分配一个唯一的ID(通常是一个随机生成的字符串)。 - 服务器将这个session ID通过响应返回给客户端,通常是以cookie的形式。 -...