dポイントプレゼントキャンペーン実施中!

現在、会員制の位置情報コンテンツを作成しています。
ログインをして、セッションの維持のため、セッションIDをURLに付加しているのですが、
現在地を更新のために、
device:location?url=http://example.com/
にジャンプさせようと思います。
ですが、
device:location?url=http://example.com/<?=SID?>
のようにセッションIDを渡すと、リンク先のページで、
http://example.com/?PHPSESSID=xxxxxxxxxx?datum=x …
のようなURLになってしまい、エラーが出ます。
(エラー内容は、
Warning: session_start():The session id containsillegal characters, valid characters are a-z, A-Z, 0-9 and '-,' in line 38
Warning: session_start():Cannot send session cachelimiter - headers already sent (outputstarted at line 38) in line 38
のように表示されます。)
どのようにしてセッションを保持し、位置情報を取得することができるのでしょうか?

A 回答 (1件)

AUの位置情報取得の機能を使ったことは無いのですが、ご質問の内容から、以下のようにすればよいかなと思いました。



(案1)
url引数の最後に「&」を付けたらどうでしょう。

device:location?url=http://example.com/?<?=SID?>&
もしくは、
device:location?url=http%3A%2F%2Fexample.com%2F%3F<?= urlencode(SID) ?>%26
のような感じで。

位置確認後は、以下のURLに戻ってくると思います。
http://example.com/?PHPSESSID=xxxxx&?datum=xx&un …

datumの値には、$_GET['datum'] ではなく $_GET['?datum'] としてアクセスすることになるかもしれません。

(案2)
クエリパラメータではなくURL内にセッションIDを埋め込む方法。
device:location?url=http://example.com/hoge.php/<?= session_id() ?>/
のようにする。

以下のようなURLに戻ってくると思います。
http://example.com/hoge.php/xxxxxxxxx/?datum=xx& …

hoge.phpでは、PHP_SELFからセッションIDを抜いて、session_id関数に渡します。

$path = $_SERVER['PHP_SELF']; // => /hoge.php/xxxxxxxxx/
preg_match("|/([a-zA-Z0-9-]+)/$|", $path, $matches);
$sessid = $matches[1]; // => xxxxxxxxx
session_id($sessid);

session_start();
........

あくまで思い付きです。もし参考になれば。
    • good
    • 0
この回答へのお礼

現在、http://xxxx/ID/PASS/?
のようにしていましたが、不安ですので案1のやり方でしてみようと思います。
有難うございました。

お礼日時:2007/04/23 11:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!