如何在TMS Web Core网站中用Delphi代码读写浏览器Cookie?
在TMS Web Core里操作Cookie有两种常用方式,一种是直接调用你已有的JavaScript函数,另一种是使用框架内置的组件,以下是具体实现:
一、调用现有JavaScript Cookie函数
如果你已经有了现成的JS读写Cookie逻辑,可以直接在Delphi代码中调用这些函数:
1. 注入JavaScript代码
先把你的JS函数嵌入到项目中,比如在窗体的创建事件里通过asm块注入:
procedure TForm1.WebFormCreate(Sender: TObject); begin asm function getCookie(cookie_name) { const name = cookie_name + "="; const decodedCookie = decodeURIComponent(document.cookie); const ca = decodedCookie.split(';'); for(let i = 0; i < ca.length; i++) { let c = ca[i]; while (c.charAt(0) == ' ') c = c.substring(1); if (c.indexOf(name) == 0) return c.substring(name.length, c.length); } return ""; } function setCookie(cookie_name, value, minutes) { let expires = ""; if (minutes) { let date = new Date(); date.setTime(date.getTime()+(minutes*60*1000)); expires = "; expires="+date.toUTCString(); } document.cookie = cookie_name + "=" + value + expires + ";SameSite=Strict; path=/"; } end; end;
2. 在Delphi中调用JS函数
封装Delphi函数来调用对应的JS逻辑:
// 读取Cookie function GetCookie(const ACookieName: string): string; begin asm result = getCookie(ACookieName); end; end; // 设置Cookie procedure SetCookie(const ACookieName, AValue: string; AExpireMinutes: Integer); begin asm setCookie(ACookieName, AValue, AExpireMinutes); end; end;
调用示例
// 设置一个10分钟后过期的Cookie SetCookie('username', 'JohnDoe', 10); // 读取并显示Cookie值 ShowMessage('用户名Cookie:' + GetCookie('username'));
二、使用TMS Web Core内置组件
TMS Web Core提供了TWebCookie组件,无需手动编写JS即可完成Cookie操作:
1. 添加组件
从组件面板的TMS Web类别中拖放一个TWebCookie组件到窗体上。
2. 设置Cookie
procedure TForm1.btnSetCookieClick(Sender: TObject); begin WebCookie1.Name := 'username'; WebCookie1.Value := 'JohnDoe'; // 设置10分钟后过期 WebCookie1.Expires := Now + EncodeTime(0, 10, 0, 0); WebCookie1.Path := '/'; WebCookie1.SameSite := ssStrict; WebCookie1.Save; end;
3. 读取Cookie
procedure TForm1.btnGetCookieClick(Sender: TObject); begin WebCookie1.Name := 'username'; if WebCookie1.Load then ShowMessage('用户名Cookie:' + WebCookie1.Value) else ShowMessage('未找到该Cookie'); end;
批量获取所有Cookie
如果需要查看所有Cookie,可以使用WebCookieManager:
procedure TForm1.btnGetAllCookiesClick(Sender: TObject); var Cookies: TStringList; begin Cookies := TStringList.Create; try WebCookieManager.GetCookies(Cookies); Memo1.Lines.Assign(Cookies); finally Cookies.Free; end; end;
内容的提问来源于stack exchange,提问作者Shaun Roselt
相关产品推荐
相关产品推荐

