请注意:
1,一个客户端在多个服务器上的session id是不一样的
2,一定要在服务器端验证,也可以不用session
3,回答前请先说明同客户端,在不同的服务器上操作有何共同点(非客户端)
最好提些实质的回答。
37 个解决方案
#1
我觉得用一个中心服务器,即如果一个用户登陆了,那么信息写到此中心服务器数据库,其他服务器遇到用户访问,先根据IP访问中心数据库,便可知道此用户是否已经登陆。
#2
谢谢你!不过我在上面已经说明了,不能根据ip,因为一个网吧的ip常常是一样的,很容易出问题。
#3
使用数据库是最好的办法
session+数据库
ip认证的话不大妥(当然要看到底是做什么的。)
session+数据库
ip认证的话不大妥(当然要看到底是做什么的。)
#4
这个问题其实很简单
只过我们过分的靠现成的东西
假如现在没有session /没有 cookie
你怎么做用户认证呢?
session的运行机制我想不难理解。
如果客户端cookie被禁止了,session在地址栏会出现什么?
这些机制足以完成你现在需要的东西。只靠数据库就行了。其实辅助
看看 Discuz!的这个地址
forumdisplay.php?fid=1&sid=mgtN9wAy
sid=mgtN9wAy 就足够了。
每个登陆的用户,我们为他创建一个唯一的id ,也就是我们给他自定义的session id
同时在数据库创建相关的数据。
我们只要保证在客户端存在这个“session id”查询数据库
便能找到相关的 “session”数据
只过我们过分的靠现成的东西
假如现在没有session /没有 cookie
你怎么做用户认证呢?
session的运行机制我想不难理解。
如果客户端cookie被禁止了,session在地址栏会出现什么?
这些机制足以完成你现在需要的东西。只靠数据库就行了。其实辅助
看看 Discuz!的这个地址
forumdisplay.php?fid=1&sid=mgtN9wAy
sid=mgtN9wAy 就足够了。
每个登陆的用户,我们为他创建一个唯一的id ,也就是我们给他自定义的session id
同时在数据库创建相关的数据。
我们只要保证在客户端存在这个“session id”查询数据库
便能找到相关的 “session”数据
#5
至于我们自定义的session id
我们可以采用几种方式确保它存在,现成的cookie,session,地址
三种,你认为客户端不可以信任,也可以不采用,或者作为辅助。
我们可以采用几种方式确保它存在,现成的cookie,session,地址
三种,你认为客户端不可以信任,也可以不采用,或者作为辅助。
#6
谢谢老大!但是假如用sid就可以验证,那岂不是太不安全了?肯定还有其它的信息。cookie不到万不得已,不想用它。
另外,你说的session id在不同的域名,不同的服务器上会变的,根本就无法把客户端和服务器端对应起来。我在开头已经说明了。
另外,你说的session id在不同的域名,不同的服务器上会变的,根本就无法把客户端和服务器端对应起来。我在开头已经说明了。
#7
哦,没有看清楚。你说的自已要定义的session id正是我们所要东西。但这个session id怎么得到(不用cookie或ip),还不得而知。但应该往这方面想。
#8
呀
你没有明白我的意思
我说的“session id”已经加了引号了,是指我们自定义的session id
不是 php提供的 session id
但是假如用sid就可以验证,那岂不是太不安全了?
// php 提供的session不也是依靠 session id 去判断服务器端的应该读取具体那个文件?
安全问题你完全可以用自定义的算法的去创建“session id”!另外你可以加上前缀什么之类。总之这些可以靠各种手段去保证它的安全。上面只是一点手段而已。还有其他,可以想想的。
你没有明白我的意思
我说的“session id”已经加了引号了,是指我们自定义的session id
不是 php提供的 session id
但是假如用sid就可以验证,那岂不是太不安全了?
// php 提供的session不也是依靠 session id 去判断服务器端的应该读取具体那个文件?
安全问题你完全可以用自定义的算法的去创建“session id”!另外你可以加上前缀什么之类。总之这些可以靠各种手段去保证它的安全。上面只是一点手段而已。还有其他,可以想想的。
#9
但这个session id怎么得到(不用cookie或ip),还不得而知。但应该往这方面想。
// session 的机制你应该多少了解些吧
//我们可以采用几种方式确保它存在,现成的cookie,session,跟地址
// session 的机制你应该多少了解些吧
//我们可以采用几种方式确保它存在,现成的cookie,session,跟地址
#10
呵呵,我是说这个session id如何固定下来,如何和客户端相对应。
因为我从一个网站上,到另外一个网站上时单纯用session_id()得到的session id是要变化的。
所以需要找一个不变的东西,来构造自己的session id,而不是采用原来的session那个所谓的“机制”生成的。
cookie实在是不想用,单用session肯定不行,因为每个服务器里的session不一样。
我也说了,也不能用ip,因为如果在网吧,很多都是一样的。所以你说的地址不能是ip.故还需要找其它的session id.
因为我从一个网站上,到另外一个网站上时单纯用session_id()得到的session id是要变化的。
所以需要找一个不变的东西,来构造自己的session id,而不是采用原来的session那个所谓的“机制”生成的。
cookie实在是不想用,单用session肯定不行,因为每个服务器里的session不一样。
我也说了,也不能用ip,因为如果在网吧,很多都是一样的。所以你说的地址不能是ip.故还需要找其它的session id.
#11
我是说这个session id如何固定下来,如何和客户端相对应。
因为我从一个网站上,到另外一个网站上时单纯用session_id()得到的session id是要变化的。
所以需要找一个不变的东西,来构造自己的session id,而不是采用原来的session那个所谓的“机制”生成的。
/////////// 看来我的表达能力的真很差 :( 555555555555
我说的 session id 加了引号了,不是php的session id
http://community.csdn.net/Expert/topic/3132/3132551.xml?temp=.7485315
.7485315 就是我的“session id”,.7485315是你程序生成的。存放于数据库中
比如表session
sid(varchar) data(text)
当地址接收地址
http://community.csdn.net/Expert/topic/3132/3132551.xml?temp=.7485315
查询表session
select * from session where sid='$_GET[temp]'
取得data的数据 再explode
取得已经存放的数据
因为我从一个网站上,到另外一个网站上时单纯用session_id()得到的session id是要变化的。
所以需要找一个不变的东西,来构造自己的session id,而不是采用原来的session那个所谓的“机制”生成的。
/////////// 看来我的表达能力的真很差 :( 555555555555
我说的 session id 加了引号了,不是php的session id
http://community.csdn.net/Expert/topic/3132/3132551.xml?temp=.7485315
.7485315 就是我的“session id”,.7485315是你程序生成的。存放于数据库中
比如表session
sid(varchar) data(text)
当地址接收地址
http://community.csdn.net/Expert/topic/3132/3132551.xml?temp=.7485315
查询表session
select * from session where sid='$_GET[temp]'
取得data的数据 再explode
取得已经存放的数据
#12
select * from session where sid='$_GET[temp]'
sid的值
你可以通过“cookie,session,跟地址”几种方式去取得,或则只用跟地址也可以!~~
你担心数据库中存在的sid值给人猜中什么的
你可以加上时间限制、过期什么的。
也可以给你创建sid的时候采种什么乱七八糟的算法/加密,反正人家不能猜到又是唯一的就行。
反正思路就是这样。
sid的值
你可以通过“cookie,session,跟地址”几种方式去取得,或则只用跟地址也可以!~~
你担心数据库中存在的sid值给人猜中什么的
你可以加上时间限制、过期什么的。
也可以给你创建sid的时候采种什么乱七八糟的算法/加密,反正人家不能猜到又是唯一的就行。
反正思路就是这样。
#13
按照 chinaworker(网络混混 Ken.Hrcn.CN) 这位朋友说的,
如果用户登录了一台web服务器上的某个web站点,同时服务器端也在数据库中记录了针对该用户的一个唯一标识,那么当用户浏览另一台服务器的某个web站点的页面时,服务器端如何识别该用户?
如果用户登录了一台web服务器上的某个web站点,同时服务器端也在数据库中记录了针对该用户的一个唯一标识,那么当用户浏览另一台服务器的某个web站点的页面时,服务器端如何识别该用户?
#14
to :12789(大陌)
我已经说了
>< >< 次了
你可以通过“cookie,session,跟地址”几种方式去取得,或则只用跟地址也可以!~~
我已经说了
>< >< 次了
你可以通过“cookie,session,跟地址”几种方式去取得,或则只用跟地址也可以!~~
#15
“chinaworker(网络混混 Ken.Hrcn.CN)” 说的有道理,可以通过“跟地址”的方式去判断。
#16
混混的方法不错,
session_id本来就是为了它的唯一性而使用的
如果自定义可以自己做算法,
比如用当时的unix 时间戳的MD5后的串,在唯一性和安全性上我觉得都应该是不错的选择,
个人意见,仅供参考!
session_id本来就是为了它的唯一性而使用的
如果自定义可以自己做算法,
比如用当时的unix 时间戳的MD5后的串,在唯一性和安全性上我觉得都应该是不错的选择,
个人意见,仅供参考!
#17
大家不用完全把精力放在session id 上,
单从 login_name & password 上,做编码就足够了.
对于你的这种情况,我比较赞同混混的第一个方法
-----------------------------------------------
看看 Discuz!的这个地址
forumdisplay.php?fid=1&sid=mgtN9wAy
sid=mgtN9wAy 就足够了。
-----------------------------------------------
对于楼主的顾虑,不知道你担心的安全问题具体在哪?
单从 login_name & password 上,做编码就足够了.
对于你的这种情况,我比较赞同混混的第一个方法
-----------------------------------------------
看看 Discuz!的这个地址
forumdisplay.php?fid=1&sid=mgtN9wAy
sid=mgtN9wAy 就足够了。
-----------------------------------------------
对于楼主的顾虑,不知道你担心的安全问题具体在哪?
#18
用url肯定不行的,每个链接都要加一个sid?discuz做的根本就不依赖那个sid....
#19
我想听听唠叨的看法
#20
-----------------------------------------------------------------
混混的方法不错,
session_id本来就是为了它的唯一性而使用的
如果自定义可以自己做算法,
比如用当时的unix 时间戳的MD5后的串,在唯一性和安全性上我觉得都应该是不错的选择
----------------------------------------------------------------
关键所在是,用url传递首先是下下策,cookie也比它安全;其次是如何让每台服务器都能识别这个客户端
混混的方法不错,
session_id本来就是为了它的唯一性而使用的
如果自定义可以自己做算法,
比如用当时的unix 时间戳的MD5后的串,在唯一性和安全性上我觉得都应该是不错的选择
----------------------------------------------------------------
关键所在是,用url传递首先是下下策,cookie也比它安全;其次是如何让每台服务器都能识别这个客户端
#21
.........................................
#22
不知道这样行不行~~~
每个服务器都有一把密钥(可放于全局变量中)而客户端也生成一个随机密钥(SESSION中)用这两把密钥进行运算的结果放到数据库里~~~~而需要这样一个算法:每个服务器的密钥通过这个算法和另一把密钥进行运算的结果相同。(简单的XOR似乎就可以做到。)
这样应该满足楼主的意思了
每个服务器都有一把密钥(可放于全局变量中)而客户端也生成一个随机密钥(SESSION中)用这两把密钥进行运算的结果放到数据库里~~~~而需要这样一个算法:每个服务器的密钥通过这个算法和另一把密钥进行运算的结果相同。(简单的XOR似乎就可以做到。)
这样应该满足楼主的意思了
#23
可能你所说我没有理解。
但在url后面加上sid=xx,以后根据这个sid来验证,不会被采用的。即使安全性没问题,实现起来再方便也不会用它。我觉得这是不明智的。
也不用再和discuz的相比了,那是无意义的,稍微懂点的就知道,sid不是用来身份验证的
但在url后面加上sid=xx,以后根据这个sid来验证,不会被采用的。即使安全性没问题,实现起来再方便也不会用它。我觉得这是不明智的。
也不用再和discuz的相比了,那是无意义的,稍微懂点的就知道,sid不是用来身份验证的
#24
我觉得cookie+数据库就可以了,混混同意你的看法。
#25
to mikespook:
非常感谢你的回答。现在的问题是那个"客户端生成一个随机密钥",浏览每台服务器都是会变的,除非用cookie存放或者url...,我们现在想用前者,用url是不可能的。
非常感谢你的回答。现在的问题是那个"客户端生成一个随机密钥",浏览每台服务器都是会变的,除非用cookie存放或者url...,我们现在想用前者,用url是不可能的。
#26
数据库不支持远程连接。。。呵呵所以现在考虑每个用户登陆时,用cookie记录标识,用文件(可以考虑用session)记录信息,以后只要根据这两个验证就行了。
#27
最后说一次:
session是怎么运行的!
1.当客户端的ie支持cookie,那么session实际上是通过cookie去记录当前用户在服务器端所产生的id址。
2.当你的ie不支持cookie的时候,session_id自动跟在地址后面,为的就是能让服务端能够获取之前服务器产生记录session文件的文件名(既客户端的session id).
不过这一切操作都是由php是自行操作而已
我现在跟你说的只是模拟他的运行机制。
也就是原本服务器上产生的session文件存放到数据库以便多服务器共用,而他的session id我们也自己生成。
我们所以要做的就是确保我们生成的session id跟随客户端。(方法可以是:cookie,session,跟地址,没有光说跟地址一种方法!!!!!!!)
其机制完全跟session一样!这一切操作是我们写的不是php程序自带的。
the end
session是怎么运行的!
1.当客户端的ie支持cookie,那么session实际上是通过cookie去记录当前用户在服务器端所产生的id址。
2.当你的ie不支持cookie的时候,session_id自动跟在地址后面,为的就是能让服务端能够获取之前服务器产生记录session文件的文件名(既客户端的session id).
不过这一切操作都是由php是自行操作而已
我现在跟你说的只是模拟他的运行机制。
也就是原本服务器上产生的session文件存放到数据库以便多服务器共用,而他的session id我们也自己生成。
我们所以要做的就是确保我们生成的session id跟随客户端。(方法可以是:cookie,session,跟地址,没有光说跟地址一种方法!!!!!!!)
其机制完全跟session一样!这一切操作是我们写的不是php程序自带的。
the end
#28
如果要唯一的确认一个用户,那么就必须在浏览器和服务器间传递一个标识。这一点应该是都认同的了吧?
这个标识如何产生,并不是主要问题。
问题的关键是如何有效的安全的传递这个标识。
安全性由低到高,分别是
url参数
cookie
ssl
session是一个特例,就php而言:
如果客户端cookie不可用,则以url参数方式传递
如果客户端cookie可用,则以cookie方式传递
这个标识如何产生,并不是主要问题。
问题的关键是如何有效的安全的传递这个标识。
安全性由低到高,分别是
url参数
cookie
ssl
session是一个特例,就php而言:
如果客户端cookie不可用,则以url参数方式传递
如果客户端cookie可用,则以cookie方式传递
#29
同意chinaworker(网络混混 Ken.Hrcn.CN)的方法
个人感觉要在http协议下维护一个状态,本质上就那么几种方法。
个人感觉要在http协议下维护一个状态,本质上就那么几种方法。
#30
问题的关键是如何有效的安全的传递这个标识。
///////////////////////////
1.数据库中的(session)数据我们同样是有时间有效性。
2.标识(session id)我们自定义,谁知道我们的算法(如果能猜到只能证明一点,写程序的人太~~~~~~~~~)。
举例 sessin_idsubstr(md5(md5(md5(md5(time())))), 1 , 22)
中间的md5几次
谁知道? 这其实算法都很多。。。
如果这样不安全,同样session也不安全。
你可以连sessin都不用,换其他了。
///////////////////////////
1.数据库中的(session)数据我们同样是有时间有效性。
2.标识(session id)我们自定义,谁知道我们的算法(如果能猜到只能证明一点,写程序的人太~~~~~~~~~)。
举例 sessin_idsubstr(md5(md5(md5(md5(time())))), 1 , 22)
中间的md5几次
谁知道? 这其实算法都很多。。。
如果这样不安全,同样session也不安全。
你可以连sessin都不用,换其他了。
#31
另外一个生活上的问题:
如果你觉得这样不够安全,请问,你手机冲值卡是怎么冲值的???
人家电信也就一个号码
如果不安全,那是不是人家可以猜出电信的手机冲值卡号码盗用了???
电信的手机冲值卡 商业价值够高了吧!?人家都不怕被猜!!~~~~~~~~~~~~??
如果你觉得这样不够安全,请问,你手机冲值卡是怎么冲值的???
人家电信也就一个号码
如果不安全,那是不是人家可以猜出电信的手机冲值卡号码盗用了???
电信的手机冲值卡 商业价值够高了吧!?人家都不怕被猜!!~~~~~~~~~~~~??
#32
多谢徐老师~~~
我对ssl不熟悉。所以尽可能的用cookie了
to chinaworker:
多谢了。
1,没有验证,不敢说
2,地址后面跟PHPSESSID=xxx ,是由php.ini设置的,session.use_trans_sid = 1
你说的那几种方法,用url可以排除,用session也不可能(如果可以,就不用这么麻烦了),所以只剩下cookie好用
其次,我上面提到了, mysql不支持远程连接,所以现在我在想用文件的方式模拟session
我对ssl不熟悉。所以尽可能的用cookie了
to chinaworker:
多谢了。
1,没有验证,不敢说
2,地址后面跟PHPSESSID=xxx ,是由php.ini设置的,session.use_trans_sid = 1
你说的那几种方法,用url可以排除,用session也不可能(如果可以,就不用这么麻烦了),所以只剩下cookie好用
其次,我上面提到了, mysql不支持远程连接,所以现在我在想用文件的方式模拟session
#33
MYSQL支持远程连接吧?我用过的啊~~~~
PS:如果真的很在乎安全的话,你可以看看RES三层加密~~~只要客户端用私钥,所有服务器端都用公钥就可以了~~~~
PS:如果真的很在乎安全的话,你可以看看RES三层加密~~~只要客户端用私钥,所有服务器端都用公钥就可以了~~~~
#34
没有绝对的安全。。
mysql支持远程连接的,可能是你的mysql服务器禁止了你远程连接的权限
mysql支持远程连接的,可能是你的mysql服务器禁止了你远程连接的权限
#35
to ice_berg16
这个偶晓得啊,但由于其它原因,各服务器是几乎独立的,所以没有打开这个权限。
服务器不是我管的,呵呵,不要让俺打开mysql远程连接
多谢大家的帮忙。读数据库不是个好办法,因为用户每走一步,都要去这个数据库读一次,效率上面有些问题,所以现在打算用文件代替它,每个登入用户对应一个文件,这样就好多了
这个偶晓得啊,但由于其它原因,各服务器是几乎独立的,所以没有打开这个权限。
服务器不是我管的,呵呵,不要让俺打开mysql远程连接
多谢大家的帮忙。读数据库不是个好办法,因为用户每走一步,都要去这个数据库读一次,效率上面有些问题,所以现在打算用文件代替它,每个登入用户对应一个文件,这样就好多了
#36
http就是那几种跟服务器联系。要不你在客户端取得cpu,硬盘序号存入每台服务器。
然后登录是判断下。
然后登录是判断下。
#37
楼上的不要吓我啊~~
#1
我觉得用一个中心服务器,即如果一个用户登陆了,那么信息写到此中心服务器数据库,其他服务器遇到用户访问,先根据IP访问中心数据库,便可知道此用户是否已经登陆。
#2
谢谢你!不过我在上面已经说明了,不能根据ip,因为一个网吧的ip常常是一样的,很容易出问题。
#3
使用数据库是最好的办法
session+数据库
ip认证的话不大妥(当然要看到底是做什么的。)
session+数据库
ip认证的话不大妥(当然要看到底是做什么的。)
#4
这个问题其实很简单
只过我们过分的靠现成的东西
假如现在没有session /没有 cookie
你怎么做用户认证呢?
session的运行机制我想不难理解。
如果客户端cookie被禁止了,session在地址栏会出现什么?
这些机制足以完成你现在需要的东西。只靠数据库就行了。其实辅助
看看 Discuz!的这个地址
forumdisplay.php?fid=1&sid=mgtN9wAy
sid=mgtN9wAy 就足够了。
每个登陆的用户,我们为他创建一个唯一的id ,也就是我们给他自定义的session id
同时在数据库创建相关的数据。
我们只要保证在客户端存在这个“session id”查询数据库
便能找到相关的 “session”数据
只过我们过分的靠现成的东西
假如现在没有session /没有 cookie
你怎么做用户认证呢?
session的运行机制我想不难理解。
如果客户端cookie被禁止了,session在地址栏会出现什么?
这些机制足以完成你现在需要的东西。只靠数据库就行了。其实辅助
看看 Discuz!的这个地址
forumdisplay.php?fid=1&sid=mgtN9wAy
sid=mgtN9wAy 就足够了。
每个登陆的用户,我们为他创建一个唯一的id ,也就是我们给他自定义的session id
同时在数据库创建相关的数据。
我们只要保证在客户端存在这个“session id”查询数据库
便能找到相关的 “session”数据
#5
至于我们自定义的session id
我们可以采用几种方式确保它存在,现成的cookie,session,地址
三种,你认为客户端不可以信任,也可以不采用,或者作为辅助。
我们可以采用几种方式确保它存在,现成的cookie,session,地址
三种,你认为客户端不可以信任,也可以不采用,或者作为辅助。
#6
谢谢老大!但是假如用sid就可以验证,那岂不是太不安全了?肯定还有其它的信息。cookie不到万不得已,不想用它。
另外,你说的session id在不同的域名,不同的服务器上会变的,根本就无法把客户端和服务器端对应起来。我在开头已经说明了。
另外,你说的session id在不同的域名,不同的服务器上会变的,根本就无法把客户端和服务器端对应起来。我在开头已经说明了。
#7
哦,没有看清楚。你说的自已要定义的session id正是我们所要东西。但这个session id怎么得到(不用cookie或ip),还不得而知。但应该往这方面想。
#8
呀
你没有明白我的意思
我说的“session id”已经加了引号了,是指我们自定义的session id
不是 php提供的 session id
但是假如用sid就可以验证,那岂不是太不安全了?
// php 提供的session不也是依靠 session id 去判断服务器端的应该读取具体那个文件?
安全问题你完全可以用自定义的算法的去创建“session id”!另外你可以加上前缀什么之类。总之这些可以靠各种手段去保证它的安全。上面只是一点手段而已。还有其他,可以想想的。
你没有明白我的意思
我说的“session id”已经加了引号了,是指我们自定义的session id
不是 php提供的 session id
但是假如用sid就可以验证,那岂不是太不安全了?
// php 提供的session不也是依靠 session id 去判断服务器端的应该读取具体那个文件?
安全问题你完全可以用自定义的算法的去创建“session id”!另外你可以加上前缀什么之类。总之这些可以靠各种手段去保证它的安全。上面只是一点手段而已。还有其他,可以想想的。
#9
但这个session id怎么得到(不用cookie或ip),还不得而知。但应该往这方面想。
// session 的机制你应该多少了解些吧
//我们可以采用几种方式确保它存在,现成的cookie,session,跟地址
// session 的机制你应该多少了解些吧
//我们可以采用几种方式确保它存在,现成的cookie,session,跟地址
#10
呵呵,我是说这个session id如何固定下来,如何和客户端相对应。
因为我从一个网站上,到另外一个网站上时单纯用session_id()得到的session id是要变化的。
所以需要找一个不变的东西,来构造自己的session id,而不是采用原来的session那个所谓的“机制”生成的。
cookie实在是不想用,单用session肯定不行,因为每个服务器里的session不一样。
我也说了,也不能用ip,因为如果在网吧,很多都是一样的。所以你说的地址不能是ip.故还需要找其它的session id.
因为我从一个网站上,到另外一个网站上时单纯用session_id()得到的session id是要变化的。
所以需要找一个不变的东西,来构造自己的session id,而不是采用原来的session那个所谓的“机制”生成的。
cookie实在是不想用,单用session肯定不行,因为每个服务器里的session不一样。
我也说了,也不能用ip,因为如果在网吧,很多都是一样的。所以你说的地址不能是ip.故还需要找其它的session id.
#11
我是说这个session id如何固定下来,如何和客户端相对应。
因为我从一个网站上,到另外一个网站上时单纯用session_id()得到的session id是要变化的。
所以需要找一个不变的东西,来构造自己的session id,而不是采用原来的session那个所谓的“机制”生成的。
/////////// 看来我的表达能力的真很差 :( 555555555555
我说的 session id 加了引号了,不是php的session id
http://community.csdn.net/Expert/topic/3132/3132551.xml?temp=.7485315
.7485315 就是我的“session id”,.7485315是你程序生成的。存放于数据库中
比如表session
sid(varchar) data(text)
当地址接收地址
http://community.csdn.net/Expert/topic/3132/3132551.xml?temp=.7485315
查询表session
select * from session where sid='$_GET[temp]'
取得data的数据 再explode
取得已经存放的数据
因为我从一个网站上,到另外一个网站上时单纯用session_id()得到的session id是要变化的。
所以需要找一个不变的东西,来构造自己的session id,而不是采用原来的session那个所谓的“机制”生成的。
/////////// 看来我的表达能力的真很差 :( 555555555555
我说的 session id 加了引号了,不是php的session id
http://community.csdn.net/Expert/topic/3132/3132551.xml?temp=.7485315
.7485315 就是我的“session id”,.7485315是你程序生成的。存放于数据库中
比如表session
sid(varchar) data(text)
当地址接收地址
http://community.csdn.net/Expert/topic/3132/3132551.xml?temp=.7485315
查询表session
select * from session where sid='$_GET[temp]'
取得data的数据 再explode
取得已经存放的数据
#12
select * from session where sid='$_GET[temp]'
sid的值
你可以通过“cookie,session,跟地址”几种方式去取得,或则只用跟地址也可以!~~
你担心数据库中存在的sid值给人猜中什么的
你可以加上时间限制、过期什么的。
也可以给你创建sid的时候采种什么乱七八糟的算法/加密,反正人家不能猜到又是唯一的就行。
反正思路就是这样。
sid的值
你可以通过“cookie,session,跟地址”几种方式去取得,或则只用跟地址也可以!~~
你担心数据库中存在的sid值给人猜中什么的
你可以加上时间限制、过期什么的。
也可以给你创建sid的时候采种什么乱七八糟的算法/加密,反正人家不能猜到又是唯一的就行。
反正思路就是这样。
#13
按照 chinaworker(网络混混 Ken.Hrcn.CN) 这位朋友说的,
如果用户登录了一台web服务器上的某个web站点,同时服务器端也在数据库中记录了针对该用户的一个唯一标识,那么当用户浏览另一台服务器的某个web站点的页面时,服务器端如何识别该用户?
如果用户登录了一台web服务器上的某个web站点,同时服务器端也在数据库中记录了针对该用户的一个唯一标识,那么当用户浏览另一台服务器的某个web站点的页面时,服务器端如何识别该用户?
#14
to :12789(大陌)
我已经说了
>< >< 次了
你可以通过“cookie,session,跟地址”几种方式去取得,或则只用跟地址也可以!~~
我已经说了
>< >< 次了
你可以通过“cookie,session,跟地址”几种方式去取得,或则只用跟地址也可以!~~
#15
“chinaworker(网络混混 Ken.Hrcn.CN)” 说的有道理,可以通过“跟地址”的方式去判断。
#16
混混的方法不错,
session_id本来就是为了它的唯一性而使用的
如果自定义可以自己做算法,
比如用当时的unix 时间戳的MD5后的串,在唯一性和安全性上我觉得都应该是不错的选择,
个人意见,仅供参考!
session_id本来就是为了它的唯一性而使用的
如果自定义可以自己做算法,
比如用当时的unix 时间戳的MD5后的串,在唯一性和安全性上我觉得都应该是不错的选择,
个人意见,仅供参考!
#17
大家不用完全把精力放在session id 上,
单从 login_name & password 上,做编码就足够了.
对于你的这种情况,我比较赞同混混的第一个方法
-----------------------------------------------
看看 Discuz!的这个地址
forumdisplay.php?fid=1&sid=mgtN9wAy
sid=mgtN9wAy 就足够了。
-----------------------------------------------
对于楼主的顾虑,不知道你担心的安全问题具体在哪?
单从 login_name & password 上,做编码就足够了.
对于你的这种情况,我比较赞同混混的第一个方法
-----------------------------------------------
看看 Discuz!的这个地址
forumdisplay.php?fid=1&sid=mgtN9wAy
sid=mgtN9wAy 就足够了。
-----------------------------------------------
对于楼主的顾虑,不知道你担心的安全问题具体在哪?
#18
用url肯定不行的,每个链接都要加一个sid?discuz做的根本就不依赖那个sid....
#19
我想听听唠叨的看法
#20
-----------------------------------------------------------------
混混的方法不错,
session_id本来就是为了它的唯一性而使用的
如果自定义可以自己做算法,
比如用当时的unix 时间戳的MD5后的串,在唯一性和安全性上我觉得都应该是不错的选择
----------------------------------------------------------------
关键所在是,用url传递首先是下下策,cookie也比它安全;其次是如何让每台服务器都能识别这个客户端
混混的方法不错,
session_id本来就是为了它的唯一性而使用的
如果自定义可以自己做算法,
比如用当时的unix 时间戳的MD5后的串,在唯一性和安全性上我觉得都应该是不错的选择
----------------------------------------------------------------
关键所在是,用url传递首先是下下策,cookie也比它安全;其次是如何让每台服务器都能识别这个客户端
#21
.........................................
#22
不知道这样行不行~~~
每个服务器都有一把密钥(可放于全局变量中)而客户端也生成一个随机密钥(SESSION中)用这两把密钥进行运算的结果放到数据库里~~~~而需要这样一个算法:每个服务器的密钥通过这个算法和另一把密钥进行运算的结果相同。(简单的XOR似乎就可以做到。)
这样应该满足楼主的意思了
每个服务器都有一把密钥(可放于全局变量中)而客户端也生成一个随机密钥(SESSION中)用这两把密钥进行运算的结果放到数据库里~~~~而需要这样一个算法:每个服务器的密钥通过这个算法和另一把密钥进行运算的结果相同。(简单的XOR似乎就可以做到。)
这样应该满足楼主的意思了
#23
可能你所说我没有理解。
但在url后面加上sid=xx,以后根据这个sid来验证,不会被采用的。即使安全性没问题,实现起来再方便也不会用它。我觉得这是不明智的。
也不用再和discuz的相比了,那是无意义的,稍微懂点的就知道,sid不是用来身份验证的
但在url后面加上sid=xx,以后根据这个sid来验证,不会被采用的。即使安全性没问题,实现起来再方便也不会用它。我觉得这是不明智的。
也不用再和discuz的相比了,那是无意义的,稍微懂点的就知道,sid不是用来身份验证的
#24
我觉得cookie+数据库就可以了,混混同意你的看法。
#25
to mikespook:
非常感谢你的回答。现在的问题是那个"客户端生成一个随机密钥",浏览每台服务器都是会变的,除非用cookie存放或者url...,我们现在想用前者,用url是不可能的。
非常感谢你的回答。现在的问题是那个"客户端生成一个随机密钥",浏览每台服务器都是会变的,除非用cookie存放或者url...,我们现在想用前者,用url是不可能的。
#26
数据库不支持远程连接。。。呵呵所以现在考虑每个用户登陆时,用cookie记录标识,用文件(可以考虑用session)记录信息,以后只要根据这两个验证就行了。
#27
最后说一次:
session是怎么运行的!
1.当客户端的ie支持cookie,那么session实际上是通过cookie去记录当前用户在服务器端所产生的id址。
2.当你的ie不支持cookie的时候,session_id自动跟在地址后面,为的就是能让服务端能够获取之前服务器产生记录session文件的文件名(既客户端的session id).
不过这一切操作都是由php是自行操作而已
我现在跟你说的只是模拟他的运行机制。
也就是原本服务器上产生的session文件存放到数据库以便多服务器共用,而他的session id我们也自己生成。
我们所以要做的就是确保我们生成的session id跟随客户端。(方法可以是:cookie,session,跟地址,没有光说跟地址一种方法!!!!!!!)
其机制完全跟session一样!这一切操作是我们写的不是php程序自带的。
the end
session是怎么运行的!
1.当客户端的ie支持cookie,那么session实际上是通过cookie去记录当前用户在服务器端所产生的id址。
2.当你的ie不支持cookie的时候,session_id自动跟在地址后面,为的就是能让服务端能够获取之前服务器产生记录session文件的文件名(既客户端的session id).
不过这一切操作都是由php是自行操作而已
我现在跟你说的只是模拟他的运行机制。
也就是原本服务器上产生的session文件存放到数据库以便多服务器共用,而他的session id我们也自己生成。
我们所以要做的就是确保我们生成的session id跟随客户端。(方法可以是:cookie,session,跟地址,没有光说跟地址一种方法!!!!!!!)
其机制完全跟session一样!这一切操作是我们写的不是php程序自带的。
the end
#28
如果要唯一的确认一个用户,那么就必须在浏览器和服务器间传递一个标识。这一点应该是都认同的了吧?
这个标识如何产生,并不是主要问题。
问题的关键是如何有效的安全的传递这个标识。
安全性由低到高,分别是
url参数
cookie
ssl
session是一个特例,就php而言:
如果客户端cookie不可用,则以url参数方式传递
如果客户端cookie可用,则以cookie方式传递
这个标识如何产生,并不是主要问题。
问题的关键是如何有效的安全的传递这个标识。
安全性由低到高,分别是
url参数
cookie
ssl
session是一个特例,就php而言:
如果客户端cookie不可用,则以url参数方式传递
如果客户端cookie可用,则以cookie方式传递
#29
同意chinaworker(网络混混 Ken.Hrcn.CN)的方法
个人感觉要在http协议下维护一个状态,本质上就那么几种方法。
个人感觉要在http协议下维护一个状态,本质上就那么几种方法。
#30
问题的关键是如何有效的安全的传递这个标识。
///////////////////////////
1.数据库中的(session)数据我们同样是有时间有效性。
2.标识(session id)我们自定义,谁知道我们的算法(如果能猜到只能证明一点,写程序的人太~~~~~~~~~)。
举例 sessin_idsubstr(md5(md5(md5(md5(time())))), 1 , 22)
中间的md5几次
谁知道? 这其实算法都很多。。。
如果这样不安全,同样session也不安全。
你可以连sessin都不用,换其他了。
///////////////////////////
1.数据库中的(session)数据我们同样是有时间有效性。
2.标识(session id)我们自定义,谁知道我们的算法(如果能猜到只能证明一点,写程序的人太~~~~~~~~~)。
举例 sessin_idsubstr(md5(md5(md5(md5(time())))), 1 , 22)
中间的md5几次
谁知道? 这其实算法都很多。。。
如果这样不安全,同样session也不安全。
你可以连sessin都不用,换其他了。
#31
另外一个生活上的问题:
如果你觉得这样不够安全,请问,你手机冲值卡是怎么冲值的???
人家电信也就一个号码
如果不安全,那是不是人家可以猜出电信的手机冲值卡号码盗用了???
电信的手机冲值卡 商业价值够高了吧!?人家都不怕被猜!!~~~~~~~~~~~~??
如果你觉得这样不够安全,请问,你手机冲值卡是怎么冲值的???
人家电信也就一个号码
如果不安全,那是不是人家可以猜出电信的手机冲值卡号码盗用了???
电信的手机冲值卡 商业价值够高了吧!?人家都不怕被猜!!~~~~~~~~~~~~??
#32
多谢徐老师~~~
我对ssl不熟悉。所以尽可能的用cookie了
to chinaworker:
多谢了。
1,没有验证,不敢说
2,地址后面跟PHPSESSID=xxx ,是由php.ini设置的,session.use_trans_sid = 1
你说的那几种方法,用url可以排除,用session也不可能(如果可以,就不用这么麻烦了),所以只剩下cookie好用
其次,我上面提到了, mysql不支持远程连接,所以现在我在想用文件的方式模拟session
我对ssl不熟悉。所以尽可能的用cookie了
to chinaworker:
多谢了。
1,没有验证,不敢说
2,地址后面跟PHPSESSID=xxx ,是由php.ini设置的,session.use_trans_sid = 1
你说的那几种方法,用url可以排除,用session也不可能(如果可以,就不用这么麻烦了),所以只剩下cookie好用
其次,我上面提到了, mysql不支持远程连接,所以现在我在想用文件的方式模拟session
#33
MYSQL支持远程连接吧?我用过的啊~~~~
PS:如果真的很在乎安全的话,你可以看看RES三层加密~~~只要客户端用私钥,所有服务器端都用公钥就可以了~~~~
PS:如果真的很在乎安全的话,你可以看看RES三层加密~~~只要客户端用私钥,所有服务器端都用公钥就可以了~~~~
#34
没有绝对的安全。。
mysql支持远程连接的,可能是你的mysql服务器禁止了你远程连接的权限
mysql支持远程连接的,可能是你的mysql服务器禁止了你远程连接的权限
#35
to ice_berg16
这个偶晓得啊,但由于其它原因,各服务器是几乎独立的,所以没有打开这个权限。
服务器不是我管的,呵呵,不要让俺打开mysql远程连接
多谢大家的帮忙。读数据库不是个好办法,因为用户每走一步,都要去这个数据库读一次,效率上面有些问题,所以现在打算用文件代替它,每个登入用户对应一个文件,这样就好多了
这个偶晓得啊,但由于其它原因,各服务器是几乎独立的,所以没有打开这个权限。
服务器不是我管的,呵呵,不要让俺打开mysql远程连接
多谢大家的帮忙。读数据库不是个好办法,因为用户每走一步,都要去这个数据库读一次,效率上面有些问题,所以现在打算用文件代替它,每个登入用户对应一个文件,这样就好多了
#36
http就是那几种跟服务器联系。要不你在客户端取得cpu,硬盘序号存入每台服务器。
然后登录是判断下。
然后登录是判断下。
#37
楼上的不要吓我啊~~