ブログ

特定ユーザーがログインできくなってしまったので調べてほしい

『技術サポートでは、どのような対応をしているか』
皆様に具体的に知っていただきたく、実際の対応例をご紹介致します。

※問合せ内容、および、回答内容は、一部抜粋にて掲載しております。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
【問い合わせ内容】

弊社のSNSにて、特定のユーザーがログイン出来ない状態になっているという状態が発生いたしました。
ユーザーは、○○さんです。
(URL省略)

弊社で登録している管理用ユーザーアカウントでログインし、
該当のURLをリンクから開こうとすると、「現在、サーバが混み合っているか、メンテナンス中です。」になりますが、日記URLを直接開くと閲覧出来ます。

この方が、タイトルのない日記(携帯メール経由?)を2本書かれていることが、何か影響しているのではないかと思うのですが、調査をお願い出来ませんでしょうか。

念のため、デバッグモードで表示した画像を添付しております。
お手数ですが、よろしくお願いいたします。

※エラーログをお預かりしましたが、情報保護のため掲載省略いたします。

(技術サポートプラン120、OpenPNE 3.6.xご利用中のお客様)
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

【対処方法】

=以下、案内メール抜粋=

表題の件について、結果と対処方法をご報告いたします。
過去に同様の現象について、対応履歴がございました。

■ 再現方法

日記タイトルに4バイト文字に含めると、アクティビティデータが破損し、この現象が発生いたします。
この現象はコミュニティトピック・イベントのアクティビティ通知でも同様に発生いたします。

■ 対処方法

下記「調査結果」の通り、本問題は修正が容易ではありません。
OpenPNE 本体に何らかの対処が取り込まれるまで、
同様の現象が発生いたしましたら、以下のような対処をおねがいいたします。

1. 問題が発生しているアクティビティデータを抽出する
select * from activity_data where template_param not like ‘%}’;

2. 1 で抽出したデータを確認の上、削除する
delete from activity_data where template_param not like ‘%}’;

■ 調査結果

MySQL の utf8 では4バイトの文字を扱うことができず、
4バイト文字を含む文字列を保存する際に4バイト文字以降が切れてしまった不完全な状態で保存されていました。

今回の問題はこれが原因で、4バイトの文字を入れた状態で日記を投稿されたのではないかと思います。
(おそらく携帯電話からメールにて投稿した際に絵文字を入力されたのではないかと思います。)

MySQL 5.5.3 以降のバージョンで、
utf8 の代わりに utf8mb4 という文字コードを使うと
4バイトのUTF-8文字を扱えるようになりますが、
MySQL のバージョンアップに加えて既存のDBテーブルの文字コードの変更と
OpenPNE 側で utf8mb4 を使うための設定を合わせておこなう必要があり
また、OpenPNE におけるこの問題はアクティビティデータに限った問題ではなく、
DBにユーザー入力値を保存するすべての箇所に関わる問題であるため修正が容易ではありません。

UTF-8 の4バイト文字は、JIS X 0213 第3・第4水準漢字の一部や、
Unicode 6.0 の携帯電話の絵文字の一部が該当します。
Unicode 6.0 で定義された携帯電話の絵文字は
iOS 5 の絵文字として既に使われているようですが、
このうち U+10000 以降のものは UTF-8 では4バイト文字となります。

本件は OpenPNE プロジェクトへ不具合として報告しております。

https://redmine.openpne.jp/issues/3134
4バイト文字を含んだ文字列を投稿すると、4バイト文字以降のデータが切れた状態で保存されてしまう

テスト完了後に取り込んで頂くようメールでご連絡いたします。

【参考】
UTF-8で4バイトになる文字

Unicode6.0の携帯電話の絵文字の一覧 – Wikipedia

iOS Emoji

 
本問い合わせは、以上でご納得・問題解決となりました。
皆様からのお問い合わせに、迅速に対応できますよう、社員一丸となって対応しております。
 
=========================================
■公式SNS
https://sns.openpne.jp/
OpenPNEユーザーの皆さんが気軽にコミュニケーションができるQ&Aサイトです。
どなたでも無料で利用できます。(facebook、google、twitter の各アカウントでログインが可能です。)

■技術サポートサービス
http://support.pne.jp/
OpenPNE開発元の手嶋屋が提供しているサービスです。
有料になりますがこちらにお申し込みいただきますと弊社のOpenPNE開発エンジニアがOpenPNEの様々なトラブルについて、調査・サポートさせていただきます。
今後とも、OpenPNE 技術サポートサービスをよろしくお願いいたします。