本文目录一览:
- 1、php代码中重复的id怎么处理
- 2、用PHP怎么在session里存多个id
- 3、php session_id怎么理解,我用2个不同的文件都echo session_id 怎么结果都一样
- 4、php中出现session窜号,被替换
- 5、linux下 php文件中session_id无法保持不变,每次刷新页面session_id也会出现新的数值 这个是怎么搞定的?
- 6、困惑:sessionid在不同的ip上怎么会重复了
php代码中重复的id怎么处理
我觉得你在创建一个新id前就应该检查此id曾经是否被创建过,如果创建过就不再创建,而不是都创建好了才去检查是否有重复然后删除
用PHP怎么在session里存多个id
这个你不用担心,每个session都有唯一的session_id,每次生成session,php都会自动生成1条唯一的session
session_id是不会打印出来的
只能另行输出 echo session_id()
或者可以:
Session 的工作机制是:为每个访问者创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,亦或通过 URL 进行传导。
前序:
首先要明白PHPSESSID看似多次刷新都不会改变其实是没有删除本地相关联的cookie,删除的方法
session_destroy();//删除服务器端的session文件
setcookie(session_name(),'',time()-3600,'/');//删除本地相关联的cookie
session_unset();//清空内存中的cookie或者是$_SESSION = array();
然后再刷新相应的页面你就会看到PHPSESSID会发生变化了,根据此可以得:如果session文件已经创建则不重新生成PHPSESSID,否则需要重新生成,生成规则,就看下边喽……!
---------------------------------------------------------------------------------------------------------------------------------------phpsessionid重复
现在经过测试应该是不是检测session文件是否存在,而是检测PHPSESSID的cookie是否存在并且是否未过期!特此更正!
------------------------------------------------------------------------------------------------
可能PHP开发者心中多少都思考过这么两个问题:
种植在客户端浏览器中的PHPSESSIONID会出现重复吗?
PHPSESSIONID安全性如何,有没可能被黑客轻易的仿造呢?
带上这个问题,我稍微注意了一下PHP的源码后,疑问也就有了答案。
PHP在使用默认的 session.save_handler = files 方式时,PHPSESSIONID的生产算法原理如下:
hash_func = md5 / sha1 #可由php.ini配置
PHPSESSIONID = hash_func(客户端IP + 当前时间(秒)+ 当前时间(微妙)+ PHP自带的随机数生产器)
从以上hash_func(*)中的数据采样值的内容分析,多个用户在同一台服务器时所生产的PHPSESSIONID重复的概率极低(至少为百万份之一),设想,但台动态Web Server能到2000/rps已经很强悍了。-phpsessionid重复
另外,黑客如果要猜出某一用户的PHPSESSIONID,则他也必须知道“客户端IP、当前时间(秒、微妙)、随机数”等数据方可模拟。
以下是截取PHP源码中PHPSESSIONID实现片段:
gettimeofday(tv, NULL);
if (
zend_hash_find(EG(symbol_table), "_SERVER", sizeof("_SERVER"), (void **) array) == SUCCESS
Z_TYPE_PP(array) == IS_ARRAY zend_hash_find(Z_ARRVAL_PP(array), "REMOTE_ADDR", sizeof("REMOTE_ADDR"), (void **) token) == SUCCESS)-phpsessionid重复
{
remote_addr = Z_STRVAL_PP(token);
}
spprintf(buf, 0, "%.15s%ld%ld%0.8F", remote_addr ? remote_addr : "", tv.tv_sec, (long int)tv.tv_usec, php_combined_lcg(TSRMLS_C) * 10);-phpsessionid重复
switch (PS(hash_func))
{
case PS_HASH_FUNC_MD5:
PHP_MD5Init(md5_context);
PHP_MD5Update(md5_context, (unsigned char *) buf, strlen(buf));
digest_len = 16;
break;
case PS_HASH_FUNC_SHA1:
PHP_SHA1Init(sha1_context);
PHP_SHA1Update(sha1_context, (unsigned char *) buf, strlen(buf));
digest_len = 20;
break;
default:
php_error_docref(NULL TSRMLS_CC, E_ERROR, "Invalid session hash function");
efree(buf);
return NULL;
}
php session_id怎么理解,我用2个不同的文件都echo session_id 怎么结果都一样
简单来说 session_id 就像是门禁卡一样
只要有session_id 而且正确,就说明已经登陆成功,在网站所有位置都是一样的,
如果没有session_id,就说明没有登陆,
php中出现session窜号,被替换
出现这种情况可能是存放session_id的cookie被设置定值了··导致session_id都是同一个·所以session都一样了·
也可能是通过session_id函数设置了session_id。
总之是session_id一样才会出现session被覆盖的现象
linux下 php文件中session_id无法保持不变,每次刷新页面session_id也会出现新的数值 这个是怎么搞定的?
session_id随时变化的原因有两点:
1、客户端COOKIE无法存取
2、浏览器问题
最基本的解决办法就是取得当前的session_id,
然后将此值用query_string的方式传递到下一个页面:
$s_id = session_id();
跳转时:b.php?sid=$s_id
在b中用$_GET['sid']来获取session_id,并在session_start()之前设置session_id: session_id($_GET['sid']);
session_start();
困惑:sessionid在不同的ip上怎么会重复了
每个活动的 ASP.NET 会话都是使用 120 位的 SessionID 字符串进行标识和跟踪的,该字符串只包含 URL 中所允许使用的 ASCII 字符。SessionID 值是使用保证唯一性和随机性的算法生成的,其中保证唯一性的目的是确保会话不冲突,保证随机性的目的是确保怀有恶意的用户不能使用新的 SessionID 来计算现有会话的 SessionID。-phpsessionid重复
根据配置应用程序设置的方式,通过 HTTP Cookie 或嵌套有 SessionID 字符串的修改的 URL 跨客户端-服务器请求与 SessionID 字符串进行通信。