谢谢你!不过我在上面已经说明了,不能根据ip,因为一个网吧的ip常常是一样的,很容易出问题。

解决方案 »

  1.   

    使用数据库是最好的办法session+数据库ip认证的话不大妥(当然要看到底是做什么的。)
      

  2.   

    这个问题其实很简单只过我们过分的靠现成的东西假如现在没有session /没有 cookie你怎么做用户认证呢?session的运行机制我想不难理解。如果客户端cookie被禁止了,session在地址栏会出现什么?这些机制足以完成你现在需要的东西。只靠数据库就行了。其实辅助看看 Discuz!的这个地址
    forumdisplay.php?fid=1&sid=mgtN9wAysid=mgtN9wAy  就足够了。
    每个登陆的用户,我们为他创建一个唯一的id ,也就是我们给他自定义的session id
    同时在数据库创建相关的数据。我们只要保证在客户端存在这个“session id”查询数据库便能找到相关的 “session”数据
      

  3.   

    至于我们自定义的session id
    我们可以采用几种方式确保它存在,现成的cookie,session,地址三种,你认为客户端不可以信任,也可以不采用,或者作为辅助。
      

  4.   

    谢谢老大!但是假如用sid就可以验证,那岂不是太不安全了?肯定还有其它的信息。cookie不到万不得已,不想用它。另外,你说的session id在不同的域名,不同的服务器上会变的,根本就无法把客户端和服务器端对应起来。我在开头已经说明了。
      

  5.   

    哦,没有看清楚。你说的自已要定义的session id正是我们所要东西。但这个session id怎么得到(不用cookie或ip),还不得而知。但应该往这方面想。
      

  6.   

    呀你没有明白我的意思我说的“session id”已经加了引号了,是指我们自定义的session id不是 php提供的 session id
    但是假如用sid就可以验证,那岂不是太不安全了?// php 提供的session不也是依靠 session id 去判断服务器端的应该读取具体那个文件?
    安全问题你完全可以用自定义的算法的去创建“session id”!另外你可以加上前缀什么之类。总之这些可以靠各种手段去保证它的安全。上面只是一点手段而已。还有其他,可以想想的。
      

  7.   

    但这个session id怎么得到(不用cookie或ip),还不得而知。但应该往这方面想。
    // session 的机制你应该多少了解些吧//我们可以采用几种方式确保它存在,现成的cookie,session,跟地址
      

  8.   

    呵呵,我是说这个session id如何固定下来,如何和客户端相对应。因为我从一个网站上,到另外一个网站上时单纯用session_id()得到的session id是要变化的。
    所以需要找一个不变的东西,来构造自己的session id,而不是采用原来的session那个所谓的“机制”生成的。cookie实在是不想用,单用session肯定不行,因为每个服务器里的session不一样。我也说了,也不能用ip,因为如果在网吧,很多都是一样的。所以你说的地址不能是ip.故还需要找其它的session id.
      

  9.   

    我是说这个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取得已经存放的数据
      

  10.   

    select * from session where sid='$_GET[temp]'
    sid的值你可以通过“cookie,session,跟地址”几种方式去取得,或则只用跟地址也可以!~~你担心数据库中存在的sid值给人猜中什么的
    你可以加上时间限制、过期什么的。
    也可以给你创建sid的时候采种什么乱七八糟的算法/加密,反正人家不能猜到又是唯一的就行。反正思路就是这样。
      

  11.   

    按照 chinaworker(网络混混 Ken.Hrcn.CN) 这位朋友说的,如果用户登录了一台web服务器上的某个web站点,同时服务器端也在数据库中记录了针对该用户的一个唯一标识,那么当用户浏览另一台服务器的某个web站点的页面时,服务器端如何识别该用户?
      

  12.   

    to :12789(大陌) 我已经说了><  >< 次了你可以通过“cookie,session,跟地址”几种方式去取得,或则只用跟地址也可以!~~
      

  13.   

    “chinaworker(网络混混 Ken.Hrcn.CN)” 说的有道理,可以通过“跟地址”的方式去判断。
      

  14.   

    混混的方法不错,
    session_id本来就是为了它的唯一性而使用的
    如果自定义可以自己做算法,
    比如用当时的unix 时间戳的MD5后的串,在唯一性和安全性上我觉得都应该是不错的选择,个人意见,仅供参考!
      

  15.   

    大家不用完全把精力放在session id 上,
    单从 login_name & password 上,做编码就足够了.对于你的这种情况,我比较赞同混混的第一个方法
    -----------------------------------------------
    看看 Discuz!的这个地址
    forumdisplay.php?fid=1&sid=mgtN9wAy
    sid=mgtN9wAy  就足够了。
    -----------------------------------------------
    对于楼主的顾虑,不知道你担心的安全问题具体在哪?
      

  16.   

    用url肯定不行的,每个链接都要加一个sid?discuz做的根本就不依赖那个sid....
      

  17.   

    -----------------------------------------------------------------
    混混的方法不错,
    session_id本来就是为了它的唯一性而使用的
    如果自定义可以自己做算法,
    比如用当时的unix 时间戳的MD5后的串,在唯一性和安全性上我觉得都应该是不错的选择
    ----------------------------------------------------------------关键所在是,用url传递首先是下下策,cookie也比它安全;其次是如何让每台服务器都能识别这个客户端
      

  18.   

    不知道这样行不行~~~每个服务器都有一把密钥(可放于全局变量中)而客户端也生成一个随机密钥(SESSION中)用这两把密钥进行运算的结果放到数据库里~~~~而需要这样一个算法:每个服务器的密钥通过这个算法和另一把密钥进行运算的结果相同。(简单的XOR似乎就可以做到。)这样应该满足楼主的意思了
      

  19.   

    可能你所说我没有理解。但在url后面加上sid=xx,以后根据这个sid来验证,不会被采用的。即使安全性没问题,实现起来再方便也不会用它。我觉得这是不明智的。也不用再和discuz的相比了,那是无意义的,稍微懂点的就知道,sid不是用来身份验证的
      

  20.   

    我觉得cookie+数据库就可以了,混混同意你的看法。
      

  21.   

    to mikespook:非常感谢你的回答。现在的问题是那个"客户端生成一个随机密钥",浏览每台服务器都是会变的,除非用cookie存放或者url...,我们现在想用前者,用url是不可能的。
      

  22.   

    数据库不支持远程连接呵呵所以现在考虑每个用户登陆时,用cookie记录标识,用文件(可以考虑用session)记录信息,以后只要根据这两个验证就行了。
      

  23.   

    最后说一次:
    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
      

  24.   

    如果要唯一的确认一个用户,那么就必须在浏览器和服务器间传递一个标识。这一点应该是都认同的了吧?这个标识如何产生,并不是主要问题。
    问题的关键是如何有效的安全的传递这个标识。
    安全性由低到高,分别是
    url参数
    cookie
    sslsession是一个特例,就php而言:
    如果客户端cookie不可用,则以url参数方式传递
    如果客户端cookie可用,则以cookie方式传递
      

  25.   

    同意chinaworker(网络混混 Ken.Hrcn.CN)的方法
    个人感觉要在http协议下维护一个状态,本质上就那么几种方法。
      

  26.   

    问题的关键是如何有效的安全的传递这个标识。///////////////////////////1.数据库中的(session)数据我们同样是有时间有效性。
    2.标识(session id)我们自定义,谁知道我们的算法(如果能猜到只能证明一点,写程序的人太~~~~~~~~~)。举例 sessin_idsubstr(md5(md5(md5(md5(time())))), 1 , 22)中间的md5几次谁知道?  这其实算法都很多如果这样不安全,同样session也不安全。你可以连sessin都不用,换其他了。
      

  27.   

    多谢徐老师~~~
    我对ssl不熟悉。所以尽可能的用cookie了to chinaworker:
    多谢了。
    1,没有验证,不敢说
    2,地址后面跟PHPSESSID=xxx ,是由php.ini设置的,session.use_trans_sid = 1你说的那几种方法,用url可以排除,用session也不可能(如果可以,就不用这么麻烦了),所以只剩下cookie好用其次,我上面提到了, mysql不支持远程连接,所以现在我在想用文件的方式模拟session
      

  28.   

    MYSQL支持远程连接吧?我用过的啊~~~~PS:如果真的很在乎安全的话,你可以看看RES三层加密~~~只要客户端用私钥,所有服务器端都用公钥就可以了~~~~
      

  29.   

    没有绝对的安全。。
    mysql支持远程连接的,可能是你的mysql服务器禁止了你远程连接的权限
      

  30.   

    to ice_berg16
    这个偶晓得啊,但由于其它原因,各服务器是几乎独立的,所以没有打开这个权限。服务器不是我管的,呵呵,不要让俺打开mysql远程连接多谢大家的帮忙。读数据库不是个好办法,因为用户每走一步,都要去这个数据库读一次,效率上面有些问题,所以现在打算用文件代替它,每个登入用户对应一个文件,这样就好多了
      

  31.   

    http就是那几种跟服务器联系。要不你在客户端取得cpu,硬盘序号存入每台服务器。
    然后登录是判断下。