アプリ別にcookieを扱う方法について

解決


もん  2022-02-27 01:59:22  No: 150081  IP: [192.*.*.*]

こんにちはです。
browserでアプリ別にcookieを扱う方法について探っております。

portableアプリ等ではcookieは別物として認識されますが
delphiで普通に作るとdirを分けを行っても同じIEエンジンで共有されているようで
たとえば、アプリごとにgoogleにログインすると最後のものが適用されてしまいます。

これを解決するには、別のブラウザーエンジンでなくてはだめなのか?
indy9等でできるのか、それとも、cookieをデーターと保持して、さし替えて実装するのか
、上記どれかだとして、その場合はどのように処理を繰り分けるのかを探しております。

ぜひ導いていただけますと助かります。

編集 削除
take  2022-02-27 04:00:56  No: 150082  IP: [192.*.*.*]

この表題と内容では回答しづらいと思いますが

「アプリからブラウザを開くときにGoogleアカウントを指定して開くには?」
こういうことかな

ならブラウザを開いてデータを取得する送受信で
ログインアカウントのやりとりがあるので
そこでログインしたいIDとパスワードを送ります。
ブラウザで毎回入力しなくて良いのはcookieだったり
アカウントに紐付けされたサーバーデータとして管理されていたりします。

もしcookieの差し替えでもし可能だったとしても
それはやらないほうが良いですよね?

どうやってログインアカウントをアプリ側から送るのかは
同じGoogleでも使いたいサービスによって異なります。

方法としてはパッと思いつくのが3種類で

1.GoogleAPIを使用する
2.自身でWinsockAPIからTCP/IP HTTPの送受信を作ってログインする
3.(2)をWinsockAPIではなくindyを使用する

Googleは年々セキュリティが強化されてるので
去年できたやり方で今年もログインできるのかどうかわかりません。

編集 削除
もん  2022-03-01 16:36:12  No: 150091  IP: [192.*.*.*]

take様、おばんさまです。

googleアカウントを開きたいのでは無く
アプリごとに同じ型のクッキーでも読むコム値を変えたく思います。

単純に言うと、同じオリジンでもアプリにより記憶を変えたい感じになります。

Aのアプリで楽天のcookieでログインしていたら次回利用時にAでのログインのまま
Bのアプリで楽天のcookieでログインしていたら次回利用時にBでのログインのまま

と言う感じです。

編集 削除
take  2022-03-01 23:36:57  No: 150092  IP: [192.*.*.*]

Delphiプログラム以前に
楽天で複数アカウントを作って切り替えて運用するって使用方法が規約違反ですね。

そのため回答できません。

楽天ってのが例えでcookieの読み書きと言われても、それが出来たら作ったアプリの起動時に
ブラウザで使われているcokieを読み取って制作者に送信 なんてのが作れてしまいます。

編集 削除
take  2022-03-02 00:41:32  No: 150093  IP: [192.*.*.*]

やりたいことは大丈夫なことという想定で進めると

「今使っているブラウザでログインの自動化をしたい」
これが出来ればいいということかな?

Delphiで組んでそれ以降の処理もDelphiでという場合は
Indy と OpenSSL で HTTP通信を使ってログインIDとパスワードを渡して処理するのですが

使っているブラウザでログイン処理を自動化となると
実際に動かすには色々やらないといけないけど下記のようになります。

uses にWinapi.ShellAPIを追加

var
  LHandle : HWND;
  hUrl    : HWND;
  LClassName,s : string;
begin
  LClassName := 'Google Chrome'; // ここでブラウザのクラス名を指定 ※値は適当なので自分で探して

  LHandle := FindWindow(PChar(LClassName), nil);
  if LHandle = 0 then exit;

  hUrl := GetDlgItem(LHandle,1001); // Chromeブラウザの URLを示すItem番号を指定 ※値は適当なので自分で探して
  if hUrl=0 then exit;
  
  s := 'https://';   // ログインするためのURLを指定
  SendMessage(hUrl,WM_SETTEXT,0,LPARAM(PChar(s)));
  SendMessage( hUrl, WM_KEYDOWN, VK_RETURN, 0);

  // これでログイン画面に進めるのなら
  // ログインのID入力アイテムをGetDlgItemで指定して 
  // SendMessageで文字列を送って
  // という感じで出来るのかも知れない

ログイン画面のIDとかパスワード入力画面が外部操作できるとは思えないので動かない可能性が高いです

編集 削除
もん  2022-03-02 05:45:37  No: 150094  IP: [192.*.*.*]

>楽天で複数アカウントを作って切り替えて運用するって使用方法が規約違反ですね。

楽天にログインをしたいという話ではなく、同じオリジンのcookieをアプリごとに読み分けしたいという話になります。
なので、handleで操作を行うとかログインを行いたいというのではなく

同じURLでアプリでアクセスした場合に
aあぷりでkeyがaaaと言うものに値を入れたら
bあぷりでkeyがbbbと言うものに値を入れたら

それぞれのアプリでアクセスを行った場合にアプリ別にそれぞれ代入したものを参照したいというのが趣旨になる感じです。

編集 削除
take  2022-03-02 06:01:36  No: 150095  IP: [192.*.*.*]

前回の質問もそうですが、もう少しわかりやすく説明できませんか?

>同じオリジンのcookieをアプリごとに読み分けしたい
この短い文章だけでもう解読する気がおきないのですが

>同じURLでアプリでアクセスした場合に
(省略)
>アプリ別にそれぞれ代入したものを参照したい

1.「アプリ」とは何?
2.「アクセス」というのはどのような操作を指してる?
3.「アプリ別」とは異なる種類のアプリ?それとも同じアプリの別プロセス?
4.「代入したもの」とは何をどこに代入したの?

アプリが別なら読み書きするCookie値も異なるのでは?

編集 削除
カミーユ  2022-03-02 23:31:02  No: 150096  IP: [192.*.*.*]

> 同じURLでアプリでアクセスした場合に
> aあぷりでkeyがaaaと言うものに値を入れたら
> bあぷりでkeyがbbbと言うものに値を入れたら

これだと、cookieを分ける必要あるんでしょうか?

さて
・IEコンポーネントを使用する
・自作アプリA、自作アプリBで、同一のとあるURLにアクセスする
・cookieの同じKEYに、アプリA、Bで異なる値を書き込みたい(読み書き?)
 ↓
cookieを切り替えたい
であれば、キャッシュの保存先を、アプリ毎に変更する事はできるのか?ということでしょうか?
古い記憶ですが、IEのキャッシュフォルダ変更には、ログオフが必要だったと思いますし、難しいんじゃないでしょうか。

chrome にはユーザー切り替え機能ありますので、chromeブラウザコンポーネント版を作るしかないのかと、思います。
(使ったことないので推測)

編集 削除
au  2022-03-03 01:14:35  No: 150097  IP: [192.*.*.*]

TEdgeBrowserであれば、UserDataFolderプロパティを設定することでcookie等のデータの保存場所を指定可能ですね。
それで目的が達成出来るのかは判りませんが

編集 削除
もん  2022-03-03 08:34:21  No: 150098  IP: [192.*.*.*]

>この短い文章だけでもう解読する気がおきないのですが

カミーユ様やau様に伝わっていますように理解できれば答えていただければという趣旨なので
知識の無い状態で検索や解読してほしいという趣旨では無いので見送っていただいてかまいません。

>これだと、cookieを分ける必要あるんでしょうか?

はじめましてです。お世話になります。
記述間違えました。

 aあぷりでkeyにaaaと言う値を入れたら
 bあぷりでkeyにbbbと言う値を入れたら

でした(>_<)

>IEのキャッシュフォルダ変更には、ログオフが必要だったと思いますし、難しいんじゃないでしょうか。

cookieがキャッシュになっているかどうかは定かではありませんが
firefoxでもChromeでもログオフなしで出来ているので何か別の手法なのかもしれませんね。

>chrome にはユーザー切り替え機能ありますので、chromeブラウザコンポーネント版を作るしかないのかと、思います。 

コントロールはIDE標準に依存しない物なら何を使っても問題ない感じです。
ただ、ユーザー切り替えを行わずに立ち上げ直しで認識を変えられればと思っております。

>TEdgeBrowserであれば、UserDataFolderプロパティを設定することでcookie等のデータの保存場所を指定可能ですね。 

au様初めまして。それです!!

ただ、調べたところ新版でしか出来ないみたいですね。
10.4依存だと・・・・・標準コントロールでは無くサードパーティーのコントロールでできるといいんですが
これって、activexの取り込み等で標準10.4以外でも利用できるのでしょうかね?

そして、いま、GeckoComponentsと言う物で出来そうだと言うところまでは突き止めました。

ソースを見ました所、procedure LoadPreferences; と言う部分があったので、ここの使い方を
理解すると行けそうな気がしますが、ぱっと見使い方の判断つきませんでした。

編集 削除
ぷち  2022-03-03 10:56:54  No: 150099  IP: [192.*.*.*]

「理解できれば」とか「知識の無い状態で」って
もっと他に言葉を選べなかったんですかね

編集 削除
take  2022-03-03 22:46:59  No: 150100  IP: [192.*.*.*]

すでに何名かの著名な方々が答えるのあきらめてるような言葉使いになってるのを気づかれた方が良いかと思いますが

ちなみに2004年の7月4日にWEBサイトにアカウントデータを送って
ログインするにはどうするのかがわからなかったので

「WinInetを使って掲示板にPOSTするには」
https://www.petitmonte.com/bbs/answers?question_id=1811

という質問をして無事解決して
それからはGoogleアカウントへログインする方法などもライブラリ化していますが

どうも私には知識がないようですので回答は見送らせて頂きます。

編集 削除
カミーユ  2022-03-04 02:03:35  No: 150101  IP: [192.*.*.*]

Chromiumベースのdelphichromiumembedded
Embedding Chromium (CEF1) in Delphi, tested on Delphi 2010, XE, XE2, Delphi 7.
https://code.google.com/archive/p/delphichromiumembedded/

編集 削除
au  2022-03-04 02:32:10  No: 150102  IP: [192.*.*.*]

10.3以前のDelphiでも使いたいならWinSoftのWebViewが恐らく同じ事が出来るんじゃないかと思います。
https://www.winsoft.sk/webview.htm

他の方法だとWEBVIEW4DELPHI(WebView2ベース)かCEF4Delphi(Chromiumベース)を使うかですかね。
WEBVIW4DELPHIは下記URLです。
https://www.briskbard.com/index.php?lang=en&pageid=webview

編集 削除
Mr.XRAY  2022-03-05 04:39:07  No: 150103  IP: [192.*.*.*]

> WEBVIW4DELPHIは下記URLです。
 
2021年12月3日に初公開されていますね.
インストールしてみました.これはいいですね.
au さん,サンクスです.
インストールしたら,demos の AddHostObject をテストするといいかも知れません.


これだけだとスレッドに直接関係ないので,質問者にも一言.
「アプリ別に cookie」というのはあり得ません.
cookie の機能は,ブラウザ (というアプリ) が持っている機能です.
「アプリ別」のアプリが,ブラウザを意味するのであれば,既にアプリ別になっています.

cookie とは何なのか,再度調べてみることをお勧めします.

編集 削除
もん  2022-03-06 12:06:09  No: 150104  IP: [192.*.*.*]

>ぷちさん

>「理解できれば」とか「知識の無い状態で」ってもっと他に言葉を選べなかったんですかね

すいません言葉不足でした。

「理解すれば出来そうなので、もう少し頑張って見るので文句を言う目的やコレに関する回答は不要です。」

でした。

コレは言葉を選んだ結果です。
もともとは「たいした知識も無いのに無理に回答しないでください。」
です。

>すでに何名かの著名な方々が答えるのあきらめてるような言葉使いになってるのを気づかれた方が良いかと思いますが

諦めているのでは無く、わかりもしないで文句を言いに来ているだけですよ。

そもそもがtakeさんやぷちさんは著名な方ではありませんし、著名な方である必要もありません&著名な方だろうと文句や注意だけの回答では解決しないと気づいた方が良いと思います。

文句を言い合いたければ、お互いで連絡先を聞き言い合いをすると良いかもしれません。

>どうも私には知識がないようですので回答は見送らせて頂きます。

ログインしたいのでは無いので、その方が助かります。

(と言うと、他に言葉を選べなかったのかと言われそうなので「質問に関しては追記はしない方向でお願いします。と言うか、お願いでは無く、しないように」)

>カミーユ様
>Chromiumベースのdelphichromiumembedded 

情報ありがとうございます。コレ早いですね。

デモで見てみたらyoutubeとかTwitterとかだと謎のサイトエラーが出るのとドキュメントが無いのでCEF4Delphiを見てみてダメだった際に再度挑戦してみようと思います。

>au様
>WinSoftのWebViewが恐らく同じ事が出来るんじゃないかと思います。 

ココのサイト面白い物いっぱいありますよね。
いまCEF4Delphiをみていますので、次にカミーユ様のを調べて、最終手段で調査してみようと思います。

>CEF4Delphi(Chromiumベース)を使うかですかね。 

ここドキュメントが整備されて便利ですね。
ドキュメントで目的の物を見つけたので挑戦中です。

CEF4Delphiを利用してみましたが、最新版ではceflib がnot foundでuses出来ないので
現在調査中です。(そもそもがceflib.pas自体が無く、uCEF・・・・pasのソースしか無い状態なのでバージョンを変えて調査してみようと思います)



編集 削除
もん  2022-03-07 05:09:36  No: 150105  IP: [192.*.*.*]

>Mr.XRAY 様
>cookie とは何なのか,再度調べてみることをお勧めします.

そこは専門なので、調べなくても理解できている感じになります。

>「アプリ別」のアプリが,ブラウザを意味するのであれば,既にアプリ別になっています.

chromeのコントロールはなっていますが、IEコントロールのときははなっていませんでした。
プロジェクト別でも同じ場所を参照されます。

>「アプリ別に cookie」というのはあり得ません. 

実際にはfirefox portable や chrome portableではアプリ別に cookieと言うのは実装されており
同じブラウザコントロールでも個別に処理がされています。

>au様、カミーユ 様

どうもありがとうございました。無事目的を達成できました。

ceflibとか無くても問題ありませんでした。
進まなかった部分は、アップデートで仕様が変更になっていたにも関わらずに
古いやり方を参照していたのが原因でした。

このたびはどうもありがとうございました。

編集 削除