ARM11 boa服务器用户登录验证
来源:互联网 发布:网络社交 人肉搜索 编辑:程序博客网 时间:2024/06/05 07:54
本文改自:http://3633188.blog.51cto.com/3623188/826594
ARM板:Tiny6410
开发环境:UBUNTU10.10
数据库版本:Sqlite3.3.7.13
BOA版本:Tiny6410自带
1.网页设计,网页设计是直接从网上下载的一个登录界面,再稍加修改而成。效果如下所示:
下载链接:http://www.mobanwang.com/mb/201008/8390.html
2. CGI代码实现
新建login.c文件,如下:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include "sqlite3.h" char* getcgidata(FILE* fp, char* requestmethod); int main() { char *input; char *req_method;char sqlStatement[512];char *zErrMsg;int nrow = 0, ncolumn = 0;char **azResult;//二维数组存放结果int rc;char userName[20]; char userPasswd[20]; int i = 0; int j = 0; printf("Content-type: text/html\n\n"); req_method = getenv("REQUEST_METHOD"); input = getcgidata(stdin, req_method); // 我们获取的input字符串可能像如下的形式 // userName="admin"&userPasswd="aaaaa" // 其中"Username="和"&Password="都是固定的 // 而"admin"和"aaaaa"都是变化的,也是我们要获取的 // 前面9个字符是userName= // 在"userName="和"&"之间的是我们要取出来的用户名 for ( i = 9; i < (int)strlen(input); i++ ) { if ( input[i] == '&' ) { userName[j] = '\0'; break; } userName[j++] = input[i]; } // 前面9个字符 + "&userPasswd="12个字符 + userName的字符数 // 是我们不要的,故省略掉,不拷贝 for ( i = 21 + strlen(userName), j = 0; i < (int)strlen(input); i++ ) { if(input[i] == '&'){userPasswd[j] = '\0';break;}userPasswd[j++] = input[i]; } sqlite3 *db=NULL; rc = sqlite3_open("info.db", &db); //打开指定的数据库文件,如果不存在将创建一个同名的数据库文件 if(rc){fprintf(stderr,"Can't open database:%s\n",sqlite3_errmsg(db));sqlite3_close(db);}strcpy(sqlStatement, "SELECT userPasswd FROM user_table WHERE userName='"); strcat(sqlStatement, userName);strcat(sqlStatement, "'");rc = sqlite3_get_table(db, sqlStatement, &azResult, &nrow, &ncolumn, &zErrMsg);if(rc != SQLITE_OK){fprintf(stderr, "SQL error:%s\n",zErrMsg);}if(nrow == 1){if(strcmp(userPasswd, azResult[1]) == 0){printf("<html>\n") ; printf("<head><title>welcome</title></head>\n") ; printf("<body>\n") ; printf("<h1>welcome home!!</h1>\n") ; printf("</body>\n") ; printf("</html>\n") ; }else{printf("<html>\n") ; printf("<head><title>welcome</title></head>\n") ; printf("<body>\n") ; printf("<h1>sorry,you need the key!</h1>\n") ; printf("</body>\n") ; printf("</html>\n") ;}}else if(nrow == 0){printf("<html>\n") ; printf("<head><title>welcome</title></head>\n") ; printf("<body>\n") ; printf("<h1>sorry,you need the key!</h1>\n") ; printf("</body>\n") ; printf("</html>\n") ;}sqlite3_free_table(azResult);sqlite3_close(db); //关闭数据库 return 0; } char* getcgidata(FILE* fp, char* requestmethod) { char* input; int len; int size = 1024; int i = 0; if (!strcmp(requestmethod, "GET")) { input = getenv("QUERY_STRING"); return input; } else if (!strcmp(requestmethod, "POST")) { len = atoi(getenv("CONTENT_LENGTH")); //得到字符长度input = (char*)malloc(sizeof(char)*(size + 1)); if (len == 0) { input[0] = '\0'; return input; } while(1) { input[i] = (char)fgetc(fp); if (i == size) { input[i+1] = '\0'; return input; } --len; if (feof(fp) || (!(len))) { i++; input[i] = '\0'; return input; } i++; } } return NULL; }3.交叉编译该代码:arm-linux-gcc -o login.cgi login.c -I /key_C/sqlite/include/ -L /key_C/sqlite/lib/ -lsqlite3,将login.cgi文件以及网页文件放到/www目录下。
4. 在/www目录下新建info.db数据库文件,并插入一条数据,即可进行用户登录验证。
- ARM11 boa服务器用户登录验证
- 嵌入式ARM+SQLite3+BOA服务器用户登录验证功能
- 嵌入式ARM+SQLite3+BOA服务器用户登录验证功能
- ARM11的boa服务的移植
- 解决用户登录不同服务器,不同服务器验证用户身份的方法。
- Jstl验证用户登录
- 用户登录验证
- RCP用户登录验证
- 用户登录验证安全问题
- 用户登录验证完整版
- 用户登录验证
- 用户登录验证
- 用户登录验证
- ajax 验证用户登录
- 验证用户登录
- 用户登录验证
- Yii 用户登录验证
- Yii 用户登录验证
- 央企分类
- 记录下 每天查询总量
- C#入门经典(在线版)
- “三好一满意” 把医疗服务推向全世界
- 关于oracle的boolean问题 汇总
- ARM11 boa服务器用户登录验证
- 性能测试指标
- 深入体验JavaWeb开发内幕——由创建Cookie到通过Cookie获取用户上次访问某站点时间的简单应用
- 制作/解压android ramdisk.img镜像
- Oracle字符数据类型及存储方式
- 11g新特性:SQL Management Base(SMB)
- Android短信编解码方式
- 快学Scala
- iOS客户端的APNS服务简介与实现