我是说这个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取得已经存放的数据
select * from session where sid='$_GET[temp]' sid的值你可以通过“cookie,session,跟地址”几种方式去取得,或则只用跟地址也可以!~~你担心数据库中存在的sid值给人猜中什么的 你可以加上时间限制、过期什么的。 也可以给你创建sid的时候采种什么乱七八糟的算法/加密,反正人家不能猜到又是唯一的就行。反正思路就是这样。
最后说一次: 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
to ice_berg16 这个偶晓得啊,但由于其它原因,各服务器是几乎独立的,所以没有打开这个权限。服务器不是我管的,呵呵,不要让俺打开mysql远程连接多谢大家的帮忙。读数据库不是个好办法,因为用户每走一步,都要去这个数据库读一次,效率上面有些问题,所以现在打算用文件代替它,每个登入用户对应一个文件,这样就好多了
forumdisplay.php?fid=1&sid=mgtN9wAysid=mgtN9wAy 就足够了。
每个登陆的用户,我们为他创建一个唯一的id ,也就是我们给他自定义的session id
同时在数据库创建相关的数据。我们只要保证在客户端存在这个“session id”查询数据库便能找到相关的 “session”数据
我们可以采用几种方式确保它存在,现成的cookie,session,地址三种,你认为客户端不可以信任,也可以不采用,或者作为辅助。
但是假如用sid就可以验证,那岂不是太不安全了?// php 提供的session不也是依靠 session id 去判断服务器端的应该读取具体那个文件?
安全问题你完全可以用自定义的算法的去创建“session id”!另外你可以加上前缀什么之类。总之这些可以靠各种手段去保证它的安全。上面只是一点手段而已。还有其他,可以想想的。
// session 的机制你应该多少了解些吧//我们可以采用几种方式确保它存在,现成的cookie,session,跟地址
所以需要找一个不变的东西,来构造自己的session id,而不是采用原来的session那个所谓的“机制”生成的。cookie实在是不想用,单用session肯定不行,因为每个服务器里的session不一样。我也说了,也不能用ip,因为如果在网吧,很多都是一样的。所以你说的地址不能是ip.故还需要找其它的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取得已经存放的数据
sid的值你可以通过“cookie,session,跟地址”几种方式去取得,或则只用跟地址也可以!~~你担心数据库中存在的sid值给人猜中什么的
你可以加上时间限制、过期什么的。
也可以给你创建sid的时候采种什么乱七八糟的算法/加密,反正人家不能猜到又是唯一的就行。反正思路就是这样。
session_id本来就是为了它的唯一性而使用的
如果自定义可以自己做算法,
比如用当时的unix 时间戳的MD5后的串,在唯一性和安全性上我觉得都应该是不错的选择,个人意见,仅供参考!
单从 login_name & password 上,做编码就足够了.对于你的这种情况,我比较赞同混混的第一个方法
-----------------------------------------------
看看 Discuz!的这个地址
forumdisplay.php?fid=1&sid=mgtN9wAy
sid=mgtN9wAy 就足够了。
-----------------------------------------------
对于楼主的顾虑,不知道你担心的安全问题具体在哪?
混混的方法不错,
session_id本来就是为了它的唯一性而使用的
如果自定义可以自己做算法,
比如用当时的unix 时间戳的MD5后的串,在唯一性和安全性上我觉得都应该是不错的选择
----------------------------------------------------------------关键所在是,用url传递首先是下下策,cookie也比它安全;其次是如何让每台服务器都能识别这个客户端
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
问题的关键是如何有效的安全的传递这个标识。
安全性由低到高,分别是
url参数
cookie
sslsession是一个特例,就php而言:
如果客户端cookie不可用,则以url参数方式传递
如果客户端cookie可用,则以cookie方式传递
个人感觉要在http协议下维护一个状态,本质上就那么几种方法。
2.标识(session id)我们自定义,谁知道我们的算法(如果能猜到只能证明一点,写程序的人太~~~~~~~~~)。举例 sessin_idsubstr(md5(md5(md5(md5(time())))), 1 , 22)中间的md5几次谁知道? 这其实算法都很多如果这样不安全,同样session也不安全。你可以连sessin都不用,换其他了。
我对ssl不熟悉。所以尽可能的用cookie了to chinaworker:
多谢了。
1,没有验证,不敢说
2,地址后面跟PHPSESSID=xxx ,是由php.ini设置的,session.use_trans_sid = 1你说的那几种方法,用url可以排除,用session也不可能(如果可以,就不用这么麻烦了),所以只剩下cookie好用其次,我上面提到了, mysql不支持远程连接,所以现在我在想用文件的方式模拟session
mysql支持远程连接的,可能是你的mysql服务器禁止了你远程连接的权限
这个偶晓得啊,但由于其它原因,各服务器是几乎独立的,所以没有打开这个权限。服务器不是我管的,呵呵,不要让俺打开mysql远程连接多谢大家的帮忙。读数据库不是个好办法,因为用户每走一步,都要去这个数据库读一次,效率上面有些问题,所以现在打算用文件代替它,每个登入用户对应一个文件,这样就好多了
然后登录是判断下。