接上一篇阿里妈妈账号登录状态如何长时间保存

既然我们获取到了cookie, 如果有多个程序都要使用到联盟帐号的时候, 如果不共享cookie, 那么每个程序都需要登录一次, 真的很浪费资源.

如何共享呢, 那就是建立一个http的服务, 提供http的接口.

如代码所示:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, diocp.ex.httpServer, ExtCtrls, ShellAPI; type
TFrmMain = class(TForm)
Button1: TButton;
Edit1: TEdit;
mmo1: TMemo;
pnl1: TPanel;
btn1: TButton;
tmr1: TTimer;
procedure Button1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure btn1Click(Sender: TObject);
procedure tmr1Timer(Sender: TObject);
private
{ Private declarations }
FTcpServer: TDiocpHttpServer;
procedure OnHttpSvrRequest(pvRequest:TDiocpHttpRequest);
procedure StartLogin();
function AtractProcess(sExe: string): Boolean;
public
{ Public declarations }
end; var
FrmMain: TFrmMain; implementation
uses uFMMonitor, diocp.core.engine; {$R *.dfm}procedure TFrmMain.Button1Click(Sender: TObject);
var
MOduleHandle:THandle;
TmpWndHandle:THandle;
aa:PChar;
begin
TmpWndHandle:=;
aa:=PChar(Edit1.Text);
TmpWndHandle:=FindWindowA(nil,aa);
if not IsWindow(TmpWndHandle) then
begin
mmo1.Lines.Add('没有找到窗口');
Exit;
end;
if InstallHook(FindWindowA(nil,aa)) then
mmo1.Lines.Add('挂载成功')
end; procedure TFrmMain.FormDestroy(Sender: TObject);
begin
UnHook;
end; procedure TFrmMain.OnHttpSvrRequest(pvRequest: TDiocpHttpRequest);
var
FLoad: TStringList;
begin
try
pvRequest.Response.ContentType := 'text/html; charset=utf-8';
pvRequest.DecodePostDataParam(false);
pvRequest.DecodeURLParam(false);
if pvRequest.RequestURI = '/GetCookie' then
begin
FLoad := TStringList.Create;
if FileExists(ExtractFilePath(ParamStr())+'cook.txt') then
FLoad.LoadFromFile(ExtractFilePath(ParamStr())+'cook.txt');
pvRequest.Response.WriteString(FLoad.Text);
FreeAndNil(FLoad);
end else
pvRequest.Response.WriteString('未知命令');
finally
pvRequest.ResponseEnd;
pvRequest.CloseContext;
end;
end; procedure TFrmMain.FormCreate(Sender: TObject);
begin
FTcpServer := TDiocpHttpServer.Create(Self);
FTcpServer.Name := 'HttpSVR';
FTcpServer.SetMaxSendingQueueSize();
FTcpServer.createDataMonitor;
FTcpServer.OnDiocpHttpRequest := OnHttpSvrRequest;
TFMMonitor.createAsChild(pnl1, FTcpServer);
FTcpServer.Port := ;
FTcpServer.Active := True;
end; procedure TFrmMain.StartLogin;
var
scmd, sPath: string;
begin
sCmd := '-lt 1 -ac -ap -dc -dp -pn AL6362845535841316741047753041';
sPath := ExtractFilePath(ParamStr());
ShellExecute(, 'open', PChar(sPath+'AliLogin.exe'), PChar(sCmd), nil, SW_SHOWNORMAL); tmr1.Enabled := True;
end; procedure TFrmMain.btn1Click(Sender: TObject);
begin
StartLogin();
end; function TFrmMain.AtractProcess(sExe: string): Boolean;
var
MOduleHandle:THandle;
TmpWndHandle:THandle;
aa:PChar;
begin
Result := False;
TmpWndHandle:=;
aa:=PChar(sExe);
TmpWndHandle:=FindWindowA(nil,aa);
if not IsWindow(TmpWndHandle) then
begin
mmo1.Lines.Add('没有找到窗口');
Exit;
end;
if InstallHook(FindWindowA(nil,aa)) then
begin
mmo1.Lines.Add('挂载成功');
Result := True;
end;
end; procedure TFrmMain.tmr1Timer(Sender: TObject);
begin
if AtractProcess('阿里妈妈登录窗体') then
tmr1.Enabled := False;
end; end.

我们把注入获取的cookie保存在cook.txt文件中, 当服务器开启后, 调用接口 http://服务器IP:9091/GetCookie?

在这个http服务中, 使用的是开源的diocp, 使用起来很简单.

下节预告  如何获取单品优惠券

如何共享联盟cookie的更多相关文章

  1. 黄聪:Wordpress二级域名共享用户cookie出现错误解决方案及WP的Cookie机制

    在若干年以前,我刚开始折腾Wordpress没多久的时候,就自己摸索过 多个Wordpress网站共享一份数据表的实现方法 .这种看起来好像很高大上的类SSO功能,能够给用户在多个网站之间提供快速.无 ...

  2. [php-cookie] cookie 请求跨域,如何共享

    cookie 请求跨域的问题, 假设我有两个域名,一个 m.example.com,另一个是 www.example.com . 那么我需要如何设置 cookie 才可以在这两个域名都实现共享呢? / ...

  3. cookie,Session机制的本质,跨应用程序的session共享

    目录:一.术语session二.HTTP协议与状态保持三.理解cookie机制四.理解session机制五.理解javax.servlet.http.HttpSession六.HttpSession常 ...

  4. 跨域共享cookie和跨域共享session

    转载自:http://blog.csdn.net/ahhsxy/article/details/7356128 这里所说的跨域,是指跨二级域名,而且这些域名对应的应用都在同一个app上, 比如我有以下 ...

  5. Javascript中关于cookie的那些事儿

    Javascript-cookie 什么是cookie? 指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密).简单点来说就是:浏览器缓存. cookie由什 ...

  6. session & cookie(li)

    Session & Cookie 一.定义 Session,用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间.Cookie,由服务器端生成,发送 ...

  7. HTTP Session、Cookie机制详解

    一.什么是http session,有什么用 HTTP协议本身是无状态的,本身并不能支持服务端保存客户端的状态信息,于是,Web Server中引入了session的概念,用来保存客户端的状态信息. ...

  8. ASP.NET Cookie(二)--控制Cookie的范围

    默认情况下,一个站点的全部Cookie都一起存储在客户端上,而且所有Cookie都会随着对该站点发送的任何请求一起发送到服务器.也就是说,一个站点中的每个页面都能获得该站点的所有Cookie.但是,可 ...

  9. jsp 入门 cookie session

    Java Server Page ==> 服务器端的动态页面资源.用来做显示的功能. JSP构成 ==> HTML 脚本代码 标签构成. JSP 原理 ==> 实际上就是 servl ...

随机推荐

  1. configure: error: Cannot find php-config. Please use --with-php-config=PATH

    本文章给大家介绍configure: error: Cannot find php-config. Please use --with-php-config=PATH错误解决办法. configure ...

  2. Python-简单的爬虫语句

    今天做一个简单的天气查询的程序,主要用到Urllib2(python自带的),和Json(Java Script Object Notation,JavaScript 对象表示法),安装步骤: jso ...

  3. RxJAVA notes

    注: 本文只适用于自我复习,初学者请移步 链接 常用模板 rxjava2+retrofit2 public static void main(String[] args) { String BASE_ ...

  4. Installation of CarbonData 1.1.0 with Spark 1.6.2

    关键词:carbondata spark thrift 数据仓库 [Install thrift 0.9.3] 注意 要装thrift-java必须先装ant . 有人说要装boost,我在cento ...

  5. ECMA Script 6_ 类 class

    类 class ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板. 通过 class 关键字,可以定义类 class 新的 class 写法只是让对象原型的写法更加 ...

  6. PHP使用 strpos() 注意事项

    返回字符出现的第一个位置, 如果字符在被搜索字符串的开头, 则会返回 ‘0’ 因此, 在使用此函数判断 字符串是否包含 某一个字符时  使用: if(strpos('string','str') != ...

  7. linux学习:xargs与grep用法整理

    xargs xargs 是给命令传递参数的一个过滤器,也是组合多个命令的一个工具. xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据. xargs 也可 ...

  8. 数据库 case when then 的用法 (举个栗子~~~)

    select a.TradeType,a.TradeState,a.Pname,a.OutTradeNo,a.*, (CASE a.TradeType when '1' then '充值' when ...

  9. JAVA RPC (五) 之thrift序列化RPC消息体

    让大家久等了.继续更新thrift序列化的消息体,下面我们一步一步的看一看thrift的rpc是怎么实例化消息体的. 首先我们先准备一个request文件 namespace java bky str ...

  10. Ubuntu18.04 快速返回桌面 【快捷键】

    设置->设备->键盘->窗口->隐藏窗口 :双击重置快捷键