我太需要你们的帮助了!按李维的书做web分布应用登录sqlserver问题(300分) (200分)

  • 主题发起人 YANCHAO28
  • 开始时间
Y

YANCHAO28

Unregistered / Unconfirmed
GUEST, unregistred user!
在李维的分布应用中给了一些web的示例,但他用的数据库是不用口令登录的。现在我服务器
方的数据库是sqlserver,我不能在ado连接先放入密码,用户呀!而李维的书说了,ie端每次
调用结束后,midas服务器就会关闭,哪我每次都要输入sqlserver的登录才能从ie看到读取的
数据?这不对吧!请大家指点
 
直接在服务器端的ADOConnectionString中写入用户密码,然后把LoginPrompt设为False
。那就不用每次都去登录了吧!
 
oceanwave 的方法虽然可行,不过这样做是不是安全性不足?比如,有的用户是可以查询资
料,有的用户可以修改资料,我如何判断?另外,在web中,一个用户登录后,我应在哪记住
该用户是已登录的用户?就象大富翁这里一样,登录后可发表意见,不登录不能发表,这如
何设计的?
 
这种情况,我是一般自建用户表,很多程序的权限控制也是如此。
至少你用SQL SERVER的权限机制,你就无法做更多的权限控制,特别是在界面上。
比如,某种用户只有浏览权限,若要使控件为只读状态,就没办法用SQL SERVER的权限
来控制(也许可以,但麻烦多了)
 
oceanwave自建用户表可能也是一种办法。不过,我还是不知道如何解决登录问题。
比如:我在web服务器中有个网页是专供用户登录的,上面有以下按键:[登录],[查询数据]
[修改数据],假设用户登录后,我在web服务器的程序中能用一些变量保存该用户的登录信息
吗?如:权限、姓名。因为,在ie中点网页上的[查询数据]时,应该会验证用户是否已经
登录吧。
请指教!
 
DELPHI的WEB SERVER我是没做过,不过在ASP或CGI中,用户的登录是用SESSION和COOKIE来
操作的。
比如某个用户登录之后,他的SESSION中的USERNAME及权限变量赋值。而SESSION相对某个
用户来讲,是全局的,那么每个操作之前判断即可。
 
找到一段代码,有说到这方面的事,只是例程有点儿长,没办法打给你了。
这本书是《DELPHI6 电子商务应用开发》。还有李维的电子商务那本也不错。
 
oceanwave ,你按哪个例程序做一个简化的行吗?我很想知道如何设计。先谢过了
 
function TDataModule3.Login(UserName,Password:WideString):WideString;
var
FGUID:TGUID;
begin
try
CS.Enter;
cdsSession.LoadFromFile(AppPath+'/Session.xml');
if cdsSession.Locate('USER;PASSWORD',VarArrayOf([UserName,Password]),[]) then
begin
if cdsSession.FieldByName('SessionHandle').AsString<>'' then
begin
Result:='';
exit;
end;
CreatGUID(FGUID);
cdsSession.Edit;
cdsSession['User']:=UserName;
cdsSession['Password']:=Password;
cdsSession['SessionHandle']:=GUIDToString(FGUID);
cdsSession.Post;
Result:=cdsSession['SessionHandle'];
end
else
Result:='ERROR';
finally
cdsSession.SaveToFile(AppPath+'/Session.xml');
cdsSession.Close;
CS.Leave;
end;
end;
 
function TDataModule3.Logout(SessionHandle:WideString):Boolean;
begin
try
Result:=False;
CS.Enter;
cdsSession.LoadFromFile(AppPath+'/Session.xml');
if cdsSession.Locate('SessionHandle',SessionHandle,[]) then
begin
cdsSession.Edit;
cdsSession['SessionHandle']:='';
cdsSession.Post;
Result:=True;
end;
finally
cdsSession.SaveToFile(AppPath+'/Session.xml');
cdsSession.Close;
CS.Leave;
end;
end;
 
function TDataModule3.ValidateSession(SessionHandle:WideString):Boolean;
begin
try
Result:=False;
CS.Enter;
cdsSession.LoadFromFile(AppPath+'/Session.xml');
if cdsSession.Locate('SessionHandle',SessionHandle,[]) then
Result:=True;
finally
cdsSession.Close;
CS.Leave;
end;
end;
 
算了,都打到这了,就把整个数据模块都打给你看了。还不知道有没有用
 
function TDataModule3.DataModuleCreate(Sender:TObject);
var
FN:array[0..255] of char;
begin
GetModuleFileName(hInstance,FN,SizeOf(FN));
AppPath:=ExtractFileDir(FN);
end;
initialization
CS:=TCriticalSection.Create;
finalization
CS.Free;
end;
 
前面的我就不打了,累死了。反正原理是一样。
 
你可以使用Cookies,但大家都知道它是个小甜饼,有不安全的因素存,
但它也很有用,当登录成功后,你可以建个Cookies,对于每一个用户
的请求你首选检Cookies然后再按其权限返回相应的内容就行了。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
顶部