Common Lispで単一のCGIプログラムを作って、クッキーを読んでみたいです。Common LispでHTTPクッキーを読むには?
HTTPヘッダーを送信してCookieを送信できることは明らかです。しかし、CGIプログラムを通じて、プログラムにアクセスしているクライアントからサーバー上のクッキーを読み取る方法を知りたいと思います。
Common Lispで単一のCGIプログラムを作って、クッキーを読んでみたいです。Common LispでHTTPクッキーを読むには?
HTTPヘッダーを送信してCookieを送信できることは明らかです。しかし、CGIプログラムを通じて、プログラムにアクセスしているクライアントからサーバー上のクッキーを読み取る方法を知りたいと思います。
CGIメカニズムは、HTTP_COOKIE
環境変数を使用してCookieを渡します。 ANSI Common Lispには、POSIXおよびWindowsのシステム環境変数にアクセスするためのAPIはありません。実装固有の関数、または実装のFFIは、Cのgetenv
と同等のものを実現するために使用されます。
Common Lisp Cookbookは、このことを示唆している:
* (defun my-getenv (name &optional default)
#+CMU
(let ((x (assoc name ext:*environment-list*
:test #'string=)))
(if x (cdr x) default))
#-CMU
(or
#+Allegro (sys:getenv name)
#+CLISP (ext:getenv name)
#+ECL (si:getenv name)
#+SBCL (sb-unix::posix-getenv name)
#+LISPWORKS (lispworks:environment-variable name)
default))
MY-GETENV
* (my-getenv "HOME")
"/home/edi"
* (my-getenv "HOM")
NIL
* (my-getenv "HOM" "huh?")
"huh?"
使用する前に、私は少しにこれを変更したい:カズの回答に基づいて
(or #+CMU (let ((x ...)) (if ...))
#+Allegro ...
#+CLISP
...
default)
[Osicat](https://www.common-lisp.net/project/osicat/manual/osicat.html#Environment)のように、POSIXシステムには '(環境変数名)'があります。窓。裸の骨のコードを見てニース。 – Ehvince
cl-cookbookの新しい、保守され、編集可能なコピーを参照する価値はありますか? https://lispcookbook.github.io/cl-cookbook/os.html – Ehvince
もう1つの理由はこれです:http://cl-cookbook.sourceforge.net/os.html彼らはこの例が古く、実装が欠けていると言っています。今すぐ 'uiop:getenv'にはasdfが付いています。 – Ehvince
、私たちは、環境変数を取得する必要があります。また
(uiop:getenv)
Osicatライブラリ(OS、ファイルとディレクトリ)POSIXシステムのための(environment-variable name)
があり、税込:しかし、私は、CL-クックブック[1]、今私たちは航空自衛隊が付属しています。このソリューションを持っているを参照しています。窓。
[1] sourceforgeのcl-cookbookは古く、時には時代遅れです。 githubにコピーがあり、維持管理されており、編集可能です:https://lispcookbook.github.io/cl-cookbook/os.html(https://github.com/LispCookbook/cl-cookbook/)。
編集:githubの上の料理がedited accordinglyされていて、単に、例えば、ウェブフレームワークの1つを使用しないのはなぜhttps://lispcookbook.github.io/cl-cookbook/os.html
にすぐに展開する必要がありますクラック? – Andrei
クラックは複雑で、なぜそれをもっと複雑にするのですか? –
コードのユーザー記述部分はあまり複雑ではありません。そして、あなたがウェブサーバー<->のcgiプログラムのやりとりを設定しているならば、クラックを設定することもできます。しかし、私はあなたの設定を知らないので、私はここで間違っていると推測しているかもしれません。 – Andrei