找回密码
 注册
搜索
查看: 6883|回复: 3

与 Discuz! 2.0 论坛结合的大厅及游戏登录程序例子

[复制链接]
发表于 2004-10-19 15:13:49 | 显示全部楼层 |阅读模式
步骤一,所有原来默认的字段名uin改为uid

步骤二,大厅DLL源程序 db.cpp 中修改 OnUserLogin() 函数,参考内容如下:
  1. long OnUserLogin(LPCTSTR lpszUser, LPCTSTR lpszPasswd, LPCTSTR lpszIP, LPCTSTR lpszConnect)
  2. {
  3.         long nUin = -1;//atol( lpszUser );        //转换为ID号
  4.         CString strCmd;
  5.         CDatabase db;        CRecordset rs;        rs.m_pDatabase = &db;
  6.         try
  7.         {
  8.                 //采用名字登录必须注册防止名字为“天云上人' or username='随便”
  9.                 //这里采用的是判断名字是否含有“ ”或“'”的办法
  10.                 int ndx = 0;
  11.                 while( lpszUser[ndx] )
  12.                 {
  13.                         if( lpszUser[ndx] == ' ' || lpszUser[ndx] == '\'' )
  14.                         {
  15.                                 break;
  16.                         }
  17.                         ndx ++;
  18.                 }
  19.                 if( lpszUser[ndx] == 0 )
  20.                 {        //没有发现含有非法字符,可以登录判断
  21.                         db.OpenEx( lpszConnect, CDatabase::noOdbcDialog );
  22.                         //验证玩家帐号
  23.                         strCmd.Format( "select %s from %s where %s='%s' and %s=md5('%s')",
  24.                                 DB_FD_ID, DB_TB_AUTH, DB_FD_USERNAME, lpszUser, DB_FD_PASSWORD, lpszPasswd );
  25.                         rs.Open( AFX_DB_USE_DEFAULT_TYPE, strCmd);
  26.                         if( rs.IsEOF() )
  27.                         {        //验证未通过, 返回-1
  28.                                 nUin = -1;
  29.                         }
  30.                         else
  31.                         {        //验证通过,则取ID号
  32.                                 rs.GetFieldValue( DB_FD_ID, strCmd );
  33.                                 nUin = atol( strCmd );
  34.                         }
  35.                 }
  36.                 else
  37.                 {        //发现了非法字符,不让登录
  38.                         nUin = -1;
  39.                 }
  40.         }
  41.         catch(...)
  42.         {
  43.                 nUin = -4;
  44.         }
  45.         rs.Close();        db.Close();
  46.         return nUin;
  47. }
复制代码


步骤三、大厅DLL源程序 db.h 中修改表和字段定义,参考内容如下:
  1. //玩家基本信息表
  2. #define DB_TB_AUTH        "cdb_members"        //表名
  3. #define DB_FD_ID        "uid"                //ID字段名
  4. #define DB_FD_USERNAME        "username"        //玩家名称
  5. #define DB_FD_PASSWORD        "password"        //密码字段名
  6. //游戏设置信息表
复制代码


步骤四、修改完以上内容编译生成DLL即可使用Discuz! 2.0 数据库+名称+密码方式登录大厅。
 楼主| 发表于 2004-10-19 15:17:08 | 显示全部楼层
步骤一、打开游戏DLL源程序,修改 db.h 中的定义,参考内容如下:

  1. //玩家基本信息表
  2. #define DB_TB_AUTH        "cdb_members"        //表名
  3. #define DB_FD_ID        "uid"                //ID字段名
  4. #define DB_FD_NAME        "username"                //名称字段名
  5. #define DB_FD_SEX        "gender"        //性别字段名
  6. #define DB_FD_PWD        "password"        //密码字段名
复制代码


步骤二、编译生成DLL,即可使用。

步骤三、修改游戏数据表的字段名(不能和演示站一样用uin,必须统一为uid)。

以上方法经过已经测试,完全可行。
回复

使用道具 举报

 楼主| 发表于 2004-10-19 15:26:46 | 显示全部楼层
一、首先要对 Discuz! 2.0 论坛进行分析,得知:
1、ID号使用的字段名是 uid。
2、Discuz! 2.0 密码采用的是MD5加密。
3、对于该论坛的注册用户,ID号为不可见,所以要考虑使用名称登录。

二、大厅DLL程序修改的要点:
1、lpszUser 传递的内容应该作为“名称”处理。必须判断是否含有非法的可能造成入侵的格式内容。
2、修改SQL语句的内容。
3、修改程序中的数据库表和字段的定义名。

三、游戏DLL程序修改的要点:
1、修改程序中的数据库表和字段的定义名。
回复

使用道具 举报

 楼主| 发表于 2005-1-15 13:58:40 | 显示全部楼层
经核对 phpWind 2.0 论坛的数据库同样可以使用上面的修改方案。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|宁德市腾云网络科技有限公司 ( 闽ICP备2022007940号-5|闽公网安备 35092202000206号 )

GMT+8, 2025-5-5 07:11 , Processed in 0.015278 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表