スレッド表示 | フラット表示〕 全トピック 920 件中 301 番目 次≫ ≪前

セッション開始時のトラブル

created: 2005-12-21 13:51 | modified: 2005-12-21 23:40 | reply: 5

[2836] セッション開始時のトラブル

user: 江戸川アダモ | created: 2005-12-21 13:51
はじめまして。最近PHPプログラムを始めたものです。

ユーザー認証のためセッション管理をしたいのですが、PHPスクリプトの最初の行”session_start()”に対していきなり次のようなメッセージがサーバ(レンタル)から帰ってきます。

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at 「現在のURLが入る」:10) in 「現在のURLが入る」in line 12 (=session_start()が書いてある行)

「ヘッダーが現在のURL(=セッションスタートを指示したphpファイル)からすでに送られている。」
と言うのはどういう意味なのでしょうか?

ちなみにphp.iniで関係ありそうなところをいじってみましたが(例えば、session.use_trans_sid = 1とする)解決しません。

もちろん、session.use_cookies = 0
にしてしまえばメッセージは出ないのですが、クッキーが全く使えないのも不便な気がするので。

言葉足らずかも知れず申し訳ありませんが、アドバイス頂ければ幸いです。
reply: 2837 返信 編集 削除

[2837] RE:

user: Pluto | created: 2005-12-21 14:58
ソースがわからないんで憶測の意見ですが、おそらくHTML記述の後にsession_start()を行ったのが原因ではないでしょうか。

session_start()は、HTML記述の前に行う必要があります。
Parent: 2836  reply: 2838 返信 編集 削除

[2838] ありがとうございます。解決しました!

user: 江戸川アダモ | created: 2005-12-21 15:24
おっしゃる通りです、<HTML>の後にsession_start()してました。

ちなみにソースコードは下のような感じです。

<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
<title>form1</title>
</head>
<body>

<?php
session_start();
$send = htmlspecialchars($_GET['data']);
if ($_GET['data'] != NULL){
echo '送信されたデータは「' . $send . '」です。<br>';

・・・・以下続く

でも、これって解説書のサンプル通りなんですけど・・・
Parent: 2837  reply: 2839 返信 編集 削除

[2839] 解説書の記述ミスだと思います^^;

user: ぱぴよん | created: 2005-12-21 15:57
江戸川アダモさんはじめまして、ぱぴよんと申します。


> でも、これって解説書のサンプル通りなんですけど・・・
解説書の記述ミスだと思います^^;


session_start() や header() などは出力よりも先に行わなければなりません。
(文字の出力やHTMLタグなどよりも)


【session_start:http://jp.php.net/manual/ja/function.session-start.php

◆上記より引用
-----------------------------------------------------
注意: クッキーに基づくセッションを使用している場合、ブラウザに何か出力を行う前にsession_start()をコールする必要があります。
-----------------------------------------------------




【header:http://jp.php.net/manual/ja/function.header.php

◆上記より引用
-----------------------------------------------------
覚えておいて頂きたいのは、header() 関数は、通常の HTML タグまたは PHP からの出力にかかわらず、すべての実際の出力の前にコールする必要があることです。頻出するエラーとして、include() または require() 関数、他のファイルをアクセスする関数に空白または空行があり、header() の前に出力が行われてしまうというものがあります。同じ問題は、単一の PHP/HTMLファイルを使用している場合でも存在します。
------------------------------------------------------


参考サイトはPHPの日本語マニュアルです(@^?^@)
Parent: 2838  reply: 2840 返信 編集 削除

[2840] ありがとうございます。

user: 江戸川アダモ | created: 2005-12-21 16:44
ぱぴよんさん、はじめまして。

確かに、解説書の方が間違っているようですね。(ちゃんと動作確認してないのか?)

これからは解説書は信じません。皆様が頼りです(^^)
今後ともよろしくお願い致しますm(_)m
Parent: 2839  reply: 2841 返信 編集 削除

[2841] 設定ファイルで

user: ach | created: 2005-12-21 23:40
たぶんoutput_bufferingだったと思うけど、これをOnにしておくと幸せかもしれない。
Parent: 2840  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 301 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑